$htmlAttributes
- */
- public function __construct(array $htmlAttributes = [], bool $usePre = true)
- {
- $this->htmlAttributes = $htmlAttributes + [
- self::HIGHLIGHT_QUOTE => 'style="color: blue;"',
- self::HIGHLIGHT_BACKTICK_QUOTE => 'style="color: purple;"',
- self::HIGHLIGHT_RESERVED => 'style="font-weight:bold;"',
- self::HIGHLIGHT_BOUNDARY => '',
- self::HIGHLIGHT_NUMBER => 'style="color: green;"',
- self::HIGHLIGHT_WORD => 'style="color: #333;"',
- self::HIGHLIGHT_ERROR => 'style="background-color: red;"',
- self::HIGHLIGHT_COMMENT => 'style="color: #aaa;"',
- self::HIGHLIGHT_VARIABLE => 'style="color: orange;"',
- self::HIGHLIGHT_PRE => 'style="color: black; background-color: white;"',
- ];
- $this->usePre = $usePre;
- }
-
- public function highlightToken(int $type, string $value): string
- {
- $value = htmlentities($value, ENT_COMPAT | ENT_IGNORE, 'UTF-8');
-
- if ($type === Token::TOKEN_TYPE_BOUNDARY && ($value === '(' || $value === ')')) {
- return $value;
- }
-
- $attributes = $this->attributes($type);
- if ($attributes === null) {
- return $value;
- }
-
- return '' . $value . ' ';
- }
-
- public function attributes(int $type): ?string
- {
- if (! isset(self::TOKEN_TYPE_TO_HIGHLIGHT[$type])) {
- return null;
- }
-
- return $this->htmlAttributes[self::TOKEN_TYPE_TO_HIGHLIGHT[$type]];
- }
-
- public function highlightError(string $value): string
- {
- return sprintf(
- '%s%s ',
- PHP_EOL,
- $this->htmlAttributes[self::HIGHLIGHT_ERROR],
- $value
- );
- }
-
- public function highlightErrorMessage(string $value): string
- {
- return $this->highlightError($value);
- }
-
- public function output(string $string): string
- {
- $string = trim($string);
- if (! $this->usePre) {
- return $string;
- }
-
- return 'htmlAttributes[self::HIGHLIGHT_PRE] . '>' . $string . ' ';
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/doctrine/sql-formatter/src/NullHighlighter.php b/fixtures/symfony_5_local_deps/vendor/doctrine/sql-formatter/src/NullHighlighter.php
deleted file mode 100644
index b62c998a9..000000000
--- a/fixtures/symfony_5_local_deps/vendor/doctrine/sql-formatter/src/NullHighlighter.php
+++ /dev/null
@@ -1,28 +0,0 @@
-tokenizer = new Tokenizer();
- $this->highlighter = $highlighter ?? (PHP_SAPI === 'cli' ? new CliHighlighter() : new HtmlHighlighter());
- }
-
- /**
- * Format the whitespace in a SQL string to make it easier to read.
- *
- * @param string $string The SQL string
- *
- * @return string The SQL string with HTML styles and formatting wrapped in a tag
- */
- public function format(string $string, string $indentString = ' '): string
- {
- // This variable will be populated with formatted html
- $return = '';
-
- // Use an actual tab while formatting and then switch out with $indentString at the end
- $tab = "\t";
-
- $indentLevel = 0;
- $newline = false;
- $inlineParentheses = false;
- $increaseSpecialIndent = false;
- $increaseBlockIndent = false;
- $indentTypes = [];
- $addedNewline = false;
- $inlineCount = 0;
- $inlineIndented = false;
- $clauseLimit = false;
-
- // Tokenize String
- $cursor = $this->tokenizer->tokenize($string);
-
- // Format token by token
- while ($token = $cursor->next(Token::TOKEN_TYPE_WHITESPACE)) {
- $highlighted = $this->highlighter->highlightToken(
- $token->type(),
- $token->value()
- );
-
- // If we are increasing the special indent level now
- if ($increaseSpecialIndent) {
- $indentLevel++;
- $increaseSpecialIndent = false;
- array_unshift($indentTypes, 'special');
- }
-
- // If we are increasing the block indent level now
- if ($increaseBlockIndent) {
- $indentLevel++;
- $increaseBlockIndent = false;
- array_unshift($indentTypes, 'block');
- }
-
- // If we need a new line before the token
- if ($newline) {
- $return = rtrim($return, ' ');
- $return .= "\n" . str_repeat($tab, $indentLevel);
- $newline = false;
- $addedNewline = true;
- } else {
- $addedNewline = false;
- }
-
- // Display comments directly where they appear in the source
- if ($token->isOfType(Token::TOKEN_TYPE_COMMENT, Token::TOKEN_TYPE_BLOCK_COMMENT)) {
- if ($token->isOfType(Token::TOKEN_TYPE_BLOCK_COMMENT)) {
- $indent = str_repeat($tab, $indentLevel);
- $return = rtrim($return, " \t");
- $return .= "\n" . $indent;
- $highlighted = str_replace("\n", "\n" . $indent, $highlighted);
- }
-
- $return .= $highlighted;
- $newline = true;
- continue;
- }
-
- if ($inlineParentheses) {
- // End of inline parentheses
- if ($token->value() === ')') {
- $return = rtrim($return, ' ');
-
- if ($inlineIndented) {
- array_shift($indentTypes);
- $indentLevel--;
- $return = rtrim($return, ' ');
- $return .= "\n" . str_repeat($tab, $indentLevel);
- }
-
- $inlineParentheses = false;
-
- $return .= $highlighted . ' ';
- continue;
- }
-
- if ($token->value() === ',') {
- if ($inlineCount >= 30) {
- $inlineCount = 0;
- $newline = true;
- }
- }
-
- $inlineCount += strlen($token->value());
- }
-
- // Opening parentheses increase the block indent level and start a new line
- if ($token->value() === '(') {
- // First check if this should be an inline parentheses block
- // Examples are "NOW()", "COUNT(*)", "int(10)", key(`somecolumn`), DECIMAL(7,2)
- // Allow up to 3 non-whitespace tokens inside inline parentheses
- $length = 0;
- $subCursor = $cursor->subCursor();
- for ($j = 1; $j <= 250; $j++) {
- // Reached end of string
- $next = $subCursor->next(Token::TOKEN_TYPE_WHITESPACE);
- if (! $next) {
- break;
- }
-
- // Reached closing parentheses, able to inline it
- if ($next->value() === ')') {
- $inlineParentheses = true;
- $inlineCount = 0;
- $inlineIndented = false;
- break;
- }
-
- // Reached an invalid token for inline parentheses
- if ($next->value() === ';' || $next->value() === '(') {
- break;
- }
-
- // Reached an invalid token type for inline parentheses
- if (
- $next->isOfType(
- Token::TOKEN_TYPE_RESERVED_TOPLEVEL,
- Token::TOKEN_TYPE_RESERVED_NEWLINE,
- Token::TOKEN_TYPE_COMMENT,
- Token::TOKEN_TYPE_BLOCK_COMMENT
- )
- ) {
- break;
- }
-
- $length += strlen($next->value());
- }
-
- if ($inlineParentheses && $length > 30) {
- $increaseBlockIndent = true;
- $inlineIndented = true;
- $newline = true;
- }
-
- // Take out the preceding space unless there was whitespace there in the original query
- $prevToken = $cursor->subCursor()->previous();
- if ($prevToken && ! $prevToken->isOfType(Token::TOKEN_TYPE_WHITESPACE)) {
- $return = rtrim($return, ' ');
- }
-
- if (! $inlineParentheses) {
- $increaseBlockIndent = true;
- // Add a newline after the parentheses
- $newline = true;
- }
- } elseif ($token->value() === ')') {
- // Closing parentheses decrease the block indent level
- // Remove whitespace before the closing parentheses
- $return = rtrim($return, ' ');
-
- $indentLevel--;
-
- // Reset indent level
- while ($j = array_shift($indentTypes)) {
- if ($j !== 'special') {
- break;
- }
-
- $indentLevel--;
- }
-
- if ($indentLevel < 0) {
- // This is an error
- $indentLevel = 0;
-
- $return .= $this->highlighter->highlightError($token->value());
- continue;
- }
-
- // Add a newline before the closing parentheses (if not already added)
- if (! $addedNewline) {
- $return .= "\n" . str_repeat($tab, $indentLevel);
- }
- } elseif ($token->isOfType(Token::TOKEN_TYPE_RESERVED_TOPLEVEL)) {
- // Top level reserved words start a new line and increase the special indent level
- $increaseSpecialIndent = true;
-
- // If the last indent type was 'special', decrease the special indent for this round
- reset($indentTypes);
- if (current($indentTypes) === 'special') {
- $indentLevel--;
- array_shift($indentTypes);
- }
-
- // Add a newline after the top level reserved word
- $newline = true;
- // Add a newline before the top level reserved word (if not already added)
- if (! $addedNewline) {
- $return = rtrim($return, ' ');
- $return .= "\n" . str_repeat($tab, $indentLevel);
- } else {
- // If we already added a newline, redo the indentation since it may be different now
- $return = rtrim($return, $tab) . str_repeat($tab, $indentLevel);
- }
-
- if ($token->hasExtraWhitespace()) {
- $highlighted = preg_replace('/\s+/', ' ', $highlighted);
- }
-
- //if SQL 'LIMIT' clause, start variable to reset newline
- if ($token->value() === 'LIMIT' && ! $inlineParentheses) {
- $clauseLimit = true;
- }
- } elseif (
- $clauseLimit &&
- $token->value() !== ',' &&
- ! $token->isOfType(Token::TOKEN_TYPE_NUMBER, Token::TOKEN_TYPE_WHITESPACE)
- ) {
- // Checks if we are out of the limit clause
- $clauseLimit = false;
- } elseif ($token->value() === ',' && ! $inlineParentheses) {
- // Commas start a new line (unless within inline parentheses or SQL 'LIMIT' clause)
- //If the previous TOKEN_VALUE is 'LIMIT', resets new line
- if ($clauseLimit === true) {
- $newline = false;
- $clauseLimit = false;
- } else {
- // All other cases of commas
- $newline = true;
- }
- } elseif ($token->isOfType(Token::TOKEN_TYPE_RESERVED_NEWLINE)) {
- // Newline reserved words start a new line
- // Add a newline before the reserved word (if not already added)
- if (! $addedNewline) {
- $return = rtrim($return, ' ');
- $return .= "\n" . str_repeat($tab, $indentLevel);
- }
-
- if ($token->hasExtraWhitespace()) {
- $highlighted = preg_replace('/\s+/', ' ', $highlighted);
- }
- } elseif ($token->isOfType(Token::TOKEN_TYPE_BOUNDARY)) {
- // Multiple boundary characters in a row should not have spaces between them (not including parentheses)
- $prevNotWhitespaceToken = $cursor->subCursor()->previous(Token::TOKEN_TYPE_WHITESPACE);
- if ($prevNotWhitespaceToken && $prevNotWhitespaceToken->isOfType(Token::TOKEN_TYPE_BOUNDARY)) {
- $prevToken = $cursor->subCursor()->previous();
- if ($prevToken && ! $prevToken->isOfType(Token::TOKEN_TYPE_WHITESPACE)) {
- $return = rtrim($return, ' ');
- }
- }
- }
-
- // If the token shouldn't have a space before it
- if (
- $token->value() === '.' ||
- $token->value() === ',' ||
- $token->value() === ';'
- ) {
- $return = rtrim($return, ' ');
- }
-
- $return .= $highlighted . ' ';
-
- // If the token shouldn't have a space after it
- if ($token->value() === '(' || $token->value() === '.') {
- $return = rtrim($return, ' ');
- }
-
- // If this is the "-" of a negative number, it shouldn't have a space after it
- if ($token->value() !== '-') {
- continue;
- }
-
- $nextNotWhitespace = $cursor->subCursor()->next(Token::TOKEN_TYPE_WHITESPACE);
- if (! $nextNotWhitespace || ! $nextNotWhitespace->isOfType(Token::TOKEN_TYPE_NUMBER)) {
- continue;
- }
-
- $prev = $cursor->subCursor()->previous(Token::TOKEN_TYPE_WHITESPACE);
- if (! $prev) {
- continue;
- }
-
- if (
- $prev->isOfType(
- Token::TOKEN_TYPE_QUOTE,
- Token::TOKEN_TYPE_BACKTICK_QUOTE,
- Token::TOKEN_TYPE_WORD,
- Token::TOKEN_TYPE_NUMBER
- )
- ) {
- continue;
- }
-
- $return = rtrim($return, ' ');
- }
-
- // If there are unmatched parentheses
- if (array_search('block', $indentTypes) !== false) {
- $return = rtrim($return, ' ');
- $return .= $this->highlighter->highlightErrorMessage(
- 'WARNING: unclosed parentheses or section'
- );
- }
-
- // Replace tab characters with the configuration tab character
- $return = trim(str_replace("\t", $indentString, $return));
-
- return $this->highlighter->output($return);
- }
-
- /**
- * Add syntax highlighting to a SQL string
- *
- * @param string $string The SQL string
- *
- * @return string The SQL string with HTML styles applied
- */
- public function highlight(string $string): string
- {
- $cursor = $this->tokenizer->tokenize($string);
-
- $return = '';
-
- while ($token = $cursor->next()) {
- $return .= $this->highlighter->highlightToken(
- $token->type(),
- $token->value()
- );
- }
-
- return $this->highlighter->output($return);
- }
-
- /**
- * Compress a query by collapsing white space and removing comments
- *
- * @param string $string The SQL string
- *
- * @return string The SQL string without comments
- */
- public function compress(string $string): string
- {
- $result = '';
- $cursor = $this->tokenizer->tokenize($string);
-
- $whitespace = true;
- while ($token = $cursor->next()) {
- // Skip comment tokens
- if ($token->isOfType(Token::TOKEN_TYPE_COMMENT, Token::TOKEN_TYPE_BLOCK_COMMENT)) {
- continue;
- }
-
- // Remove extra whitespace in reserved words (e.g "OUTER JOIN" becomes "OUTER JOIN")
-
- if (
- $token->isOfType(
- Token::TOKEN_TYPE_RESERVED,
- Token::TOKEN_TYPE_RESERVED_NEWLINE,
- Token::TOKEN_TYPE_RESERVED_TOPLEVEL
- )
- ) {
- $newValue = preg_replace('/\s+/', ' ', $token->value());
- assert($newValue !== null);
- $token = $token->withValue($newValue);
- }
-
- if ($token->isOfType(Token::TOKEN_TYPE_WHITESPACE)) {
- // If the last token was whitespace, don't add another one
- if ($whitespace) {
- continue;
- }
-
- $whitespace = true;
- // Convert all whitespace to a single space
- $token = $token->withValue(' ');
- } else {
- $whitespace = false;
- }
-
- $result .= $token->value();
- }
-
- return rtrim($result);
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/doctrine/sql-formatter/src/Token.php b/fixtures/symfony_5_local_deps/vendor/doctrine/sql-formatter/src/Token.php
deleted file mode 100644
index b3be48bfc..000000000
--- a/fixtures/symfony_5_local_deps/vendor/doctrine/sql-formatter/src/Token.php
+++ /dev/null
@@ -1,69 +0,0 @@
-type = $type;
- $this->value = $value;
- }
-
- public function value(): string
- {
- return $this->value;
- }
-
- public function type(): int
- {
- return $this->type;
- }
-
- public function isOfType(int ...$types): bool
- {
- return in_array($this->type, $types, true);
- }
-
- public function hasExtraWhitespace(): bool
- {
- return strpos($this->value(), ' ') !== false ||
- strpos($this->value(), "\n") !== false ||
- strpos($this->value(), "\t") !== false;
- }
-
- public function withValue(string $value): self
- {
- return new self($this->type(), $value);
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/doctrine/sql-formatter/src/Tokenizer.php b/fixtures/symfony_5_local_deps/vendor/doctrine/sql-formatter/src/Tokenizer.php
deleted file mode 100644
index d5e75cd8c..000000000
--- a/fixtures/symfony_5_local_deps/vendor/doctrine/sql-formatter/src/Tokenizer.php
+++ /dev/null
@@ -1,999 +0,0 @@
-',
- '+',
- '-',
- '*',
- '/',
- '!',
- '^',
- '%',
- '|',
- '&',
- '#',
- ];
-
- /**
- * Stuff that only needs to be done once. Builds regular expressions and
- * sorts the reserved words.
- */
- public function __construct()
- {
- // Sort reserved word list from longest word to shortest, 3x faster than usort
- $reservedMap = array_combine($this->reserved, array_map('strlen', $this->reserved));
- assert($reservedMap !== false);
- arsort($reservedMap);
- $this->reserved = array_keys($reservedMap);
-
- // Set up regular expressions
- $this->regexBoundaries = '(' . implode(
- '|',
- $this->quoteRegex($this->boundaries)
- ) . ')';
- $this->regexReserved = '(' . implode(
- '|',
- $this->quoteRegex($this->reserved)
- ) . ')';
- $this->regexReservedToplevel = str_replace(' ', '\\s+', '(' . implode(
- '|',
- $this->quoteRegex($this->reservedToplevel)
- ) . ')');
- $this->regexReservedNewline = str_replace(' ', '\\s+', '(' . implode(
- '|',
- $this->quoteRegex($this->reservedNewline)
- ) . ')');
-
- $this->regexFunction = '(' . implode('|', $this->quoteRegex($this->functions)) . ')';
- }
-
- /**
- * Takes a SQL string and breaks it into tokens.
- * Each token is an associative array with type and value.
- *
- * @param string $string The SQL string
- */
- public function tokenize(string $string): Cursor
- {
- $tokens = [];
-
- // Used to make sure the string keeps shrinking on each iteration
- $oldStringLen = strlen($string) + 1;
-
- $token = null;
-
- $currentLength = strlen($string);
-
- // Keep processing the string until it is empty
- while ($currentLength) {
- // If the string stopped shrinking, there was a problem
- if ($oldStringLen <= $currentLength) {
- $tokens[] = new Token(Token::TOKEN_TYPE_ERROR, $string);
-
- return new Cursor($tokens);
- }
-
- $oldStringLen = $currentLength;
-
- // Get the next token and the token type
- $token = $this->createNextToken($string, $token);
- $tokenLength = strlen($token->value());
-
- $tokens[] = $token;
-
- // Advance the string
- $string = substr($string, $tokenLength);
-
- $currentLength -= $tokenLength;
- }
-
- return new Cursor($tokens);
- }
-
- /**
- * Return the next token and token type in a SQL string.
- * Quoted strings, comments, reserved words, whitespace, and punctuation
- * are all their own tokens.
- *
- * @param string $string The SQL string
- * @param Token|null $previous The result of the previous createNextToken() call
- *
- * @return Token An associative array containing the type and value of the token.
- */
- private function createNextToken(string $string, ?Token $previous = null): Token
- {
- $matches = [];
- // Whitespace
- if (preg_match('/^\s+/', $string, $matches)) {
- return new Token(Token::TOKEN_TYPE_WHITESPACE, $matches[0]);
- }
-
- // Comment
- if (
- $string[0] === '#' ||
- (isset($string[1]) && ($string[0] === '-' && $string[1] === '-') ||
- (isset($string[1]) && $string[0] === '/' && $string[1] === '*'))
- ) {
- // Comment until end of line
- if ($string[0] === '-' || $string[0] === '#') {
- $last = strpos($string, "\n");
- $type = Token::TOKEN_TYPE_COMMENT;
- } else { // Comment until closing comment tag
- $pos = strpos($string, '*/', 2);
- assert($pos !== false);
- $last = $pos + 2;
- $type = Token::TOKEN_TYPE_BLOCK_COMMENT;
- }
-
- if ($last === false) {
- $last = strlen($string);
- }
-
- return new Token($type, substr($string, 0, $last));
- }
-
- // Quoted String
- if ($string[0] === '"' || $string[0] === '\'' || $string[0] === '`' || $string[0] === '[') {
- return new Token(
- ($string[0] === '`' || $string[0] === '['
- ? Token::TOKEN_TYPE_BACKTICK_QUOTE
- : Token::TOKEN_TYPE_QUOTE),
- $this->getQuotedString($string)
- );
- }
-
- // User-defined Variable
- if (($string[0] === '@' || $string[0] === ':') && isset($string[1])) {
- $value = null;
- $type = Token::TOKEN_TYPE_VARIABLE;
-
- // If the variable name is quoted
- if ($string[1] === '"' || $string[1] === '\'' || $string[1] === '`') {
- $value = $string[0] . $this->getQuotedString(substr($string, 1));
- } else {
- // Non-quoted variable name
- preg_match('/^(' . $string[0] . '[a-zA-Z0-9\._\$]+)/', $string, $matches);
- if ($matches) {
- $value = $matches[1];
- }
- }
-
- if ($value !== null) {
- return new Token($type, $value);
- }
- }
-
- // Number (decimal, binary, or hex)
- if (
- preg_match(
- '/^([0-9]+(\.[0-9]+)?|0x[0-9a-fA-F]+|0b[01]+)($|\s|"\'`|' . $this->regexBoundaries . ')/',
- $string,
- $matches
- )
- ) {
- return new Token(Token::TOKEN_TYPE_NUMBER, $matches[1]);
- }
-
- // Boundary Character (punctuation and symbols)
- if (preg_match('/^(' . $this->regexBoundaries . ')/', $string, $matches)) {
- return new Token(Token::TOKEN_TYPE_BOUNDARY, $matches[1]);
- }
-
- // A reserved word cannot be preceded by a '.'
- // this makes it so in "mytable.from", "from" is not considered a reserved word
- if (! $previous || $previous->value() !== '.') {
- $upper = strtoupper($string);
- // Top Level Reserved Word
- if (
- preg_match(
- '/^(' . $this->regexReservedToplevel . ')($|\s|' . $this->regexBoundaries . ')/',
- $upper,
- $matches
- )
- ) {
- return new Token(
- Token::TOKEN_TYPE_RESERVED_TOPLEVEL,
- substr($string, 0, strlen($matches[1]))
- );
- }
-
- // Newline Reserved Word
- if (
- preg_match(
- '/^(' . $this->regexReservedNewline . ')($|\s|' . $this->regexBoundaries . ')/',
- $upper,
- $matches
- )
- ) {
- return new Token(
- Token::TOKEN_TYPE_RESERVED_NEWLINE,
- substr($string, 0, strlen($matches[1]))
- );
- }
-
- // Other Reserved Word
- if (
- preg_match(
- '/^(' . $this->regexReserved . ')($|\s|' . $this->regexBoundaries . ')/',
- $upper,
- $matches
- )
- ) {
- return new Token(
- Token::TOKEN_TYPE_RESERVED,
- substr($string, 0, strlen($matches[1]))
- );
- }
- }
-
- // A function must be succeeded by '('
- // this makes it so "count(" is considered a function, but "count" alone is not
- $upper = strtoupper($string);
- // function
- if (preg_match('/^(' . $this->regexFunction . '[(]|\s|[)])/', $upper, $matches)) {
- return new Token(
- Token::TOKEN_TYPE_RESERVED,
- substr($string, 0, strlen($matches[1]) - 1)
- );
- }
-
- // Non reserved word
- preg_match('/^(.*?)($|\s|["\'`]|' . $this->regexBoundaries . ')/', $string, $matches);
-
- return new Token(Token::TOKEN_TYPE_WORD, $matches[1]);
- }
-
- /**
- * Helper function for building regular expressions for reserved words and boundary characters
- *
- * @param string[] $strings The strings to be quoted
- *
- * @return string[] The quoted strings
- */
- private function quoteRegex(array $strings): array
- {
- return array_map(static function (string $string): string {
- return preg_quote($string, '/');
- }, $strings);
- }
-
- private function getQuotedString(string $string): string
- {
- $ret = '';
-
- // This checks for the following patterns:
- // 1. backtick quoted string using `` to escape
- // 2. square bracket quoted string (SQL Server) using ]] to escape
- // 3. double quoted string using "" or \" to escape
- // 4. single quoted string using '' or \' to escape
- if (
- preg_match(
- '/^(((`[^`]*($|`))+)|
- ((\[[^\]]*($|\]))(\][^\]]*($|\]))*)|
- (("[^"\\\\]*(?:\\\\.[^"\\\\]*)*("|$))+)|
- ((\'[^\'\\\\]*(?:\\\\.[^\'\\\\]*)*(\'|$))+))/sx',
- $string,
- $matches
- )
- ) {
- $ret = $matches[1];
- }
-
- return $ret;
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/CHANGELOG.md b/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/CHANGELOG.md
deleted file mode 100644
index 39f5a8a05..000000000
--- a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/CHANGELOG.md
+++ /dev/null
@@ -1,32 +0,0 @@
-# EmailValidator Changelog
-
-## New Features
-
-* Access to local part and domain part from EmailParser
-* Validations outside of the scope of the RFC will be considered "extra" validations, thus opening the door for adding new; will live in their own folder "extra" (as requested in #248, #195, #183).
-
-## Breaking changes
-
-* PHP version upgraded to match Symfony's (as of 12/2020).
-* DNSCheckValidation now fails for missing MX records. While the RFC argues that the existence of only A records to be valid, starting in v3 they will be considered invalid.
-* Emails domain part are now intenteded to be RFC 1035 compliant, rendering previous valid emails (e.g example@examp&) invalid.
-
-## PHP versions upgrade policy
-PHP version upgrade requirement will happen via MINOR (3.x) version upgrades of the library, following the adoption level by major frameworks.
-
-## Changes
-* #235
-* #215
-* #130
-* #258
-* #188
-* #181
-* #217
-* #214
-* #249
-* #236
-* #257
-* #210
-
-## Thanks
-To contributors, be it with PRs, reporting issues or supporting otherwise.
diff --git a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/CONTRIBUTING.md b/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/CONTRIBUTING.md
deleted file mode 100644
index 907bc2c9b..000000000
--- a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/CONTRIBUTING.md
+++ /dev/null
@@ -1,153 +0,0 @@
-# Contributing
-
-When contributing to this repository make sure to follow the Pull request process below.
-Reduce to the minimum 3rd party dependencies.
-
-Please note we have a [code of conduct](#Code of Conduct), please follow it in all your interactions with the project.
-
-## Pull Request Process
-
-When doing a PR to v2 remember that you also have to do the PR port to v3, or tests confirming the bug is not reproducible.
-
-1. Supported version is v3. If you are fixing a bug in v2, please port to v3
-2. Use the title as a brief description of the changes
-3. Describe the changes you are proposing
- 1. If adding an extra validation state the benefits of adding it and the problem is solving
- 2. Document in the readme, by adding it to the list
-4. Provide appropriate tests for the code you are submitting: aim to keep the existing coverage percentage.
-5. Add your Twitter handle (if you have) so we can thank you there.
-
-## License
-By contributing, you agree that your contributions will be licensed under its MIT License.
-
-## Code of Conduct
-
-### Our Pledge
-
-We as members, contributors, and leaders pledge to make participation in our
-community a harassment-free experience for everyone, regardless of age, body
-size, visible or invisible disability, ethnicity, sex characteristics, gender
-identity and expression, level of experience, education, socio-economic status,
-nationality, personal appearance, race, religion, or sexual identity
-and orientation.
-
-We pledge to act and interact in ways that contribute to an open, welcoming,
-diverse, inclusive, and healthy community.
-
-### Our Standards
-
-Examples of behavior that contributes to a positive environment for our
-community include:
-
-* Demonstrating empathy and kindness toward other people
-* Being respectful of differing opinions, viewpoints, and experiences
-* Giving and gracefully accepting constructive feedback
-* Accepting responsibility and apologizing to those affected by our mistakes,
- and learning from the experience
-* Focusing on what is best not just for us as individuals, but for the
- overall community
-
-Examples of unacceptable behavior include:
-
-* The use of sexualized language or imagery, and sexual attention or
- advances of any kind
-* Trolling, insulting or derogatory comments, and personal or political attacks
-* Public or private harassment
-* Publishing others' private information, such as a physical or email
- address, without their explicit permission
-* Other conduct which could reasonably be considered inappropriate in a
- professional setting
-
-### Enforcement Responsibilities
-
-Community leaders are responsible for clarifying and enforcing our standards of
-acceptable behavior and will take appropriate and fair corrective action in
-response to any behavior that they deem inappropriate, threatening, offensive,
-or harmful.
-
-Community leaders have the right and responsibility to remove, edit, or reject
-comments, commits, code, wiki edits, issues, and other contributions that are
-not aligned to this Code of Conduct, and will communicate reasons for moderation
-decisions when appropriate.
-
-### Scope
-
-This Code of Conduct applies within all community spaces, and also applies when
-an individual is officially representing the community in public spaces.
-Examples of representing our community include using an official e-mail address,
-posting via an official social media account, or acting as an appointed
-representative at an online or offline event.
-
-### Enforcement
-
-Instances of abusive, harassing, or otherwise unacceptable behavior may be
-reported to the community leaders responsible for enforcement at .
-All complaints will be reviewed and investigated promptly and fairly.
-
-All community leaders are obligated to respect the privacy and security of the
-reporter of any incident.
-
-#### Enforcement Guidelines
-
-Community leaders will follow these Community Impact Guidelines in determining
-the consequences for any action they deem in violation of this Code of Conduct:
-
-#### 1. Correction
-
-**Community Impact**: Use of inappropriate language or other behavior deemed
-unprofessional or unwelcome in the community.
-
-**Consequence**: A private, written warning from community leaders, providing
-clarity around the nature of the violation and an explanation of why the
-behavior was inappropriate. A public apology may be requested.
-
-#### 2. Warning
-
-**Community Impact**: A violation through a single incident or series
-of actions.
-
-**Consequence**: A warning with consequences for continued behavior. No
-interaction with the people involved, including unsolicited interaction with
-those enforcing the Code of Conduct, for a specified period of time. This
-includes avoiding interactions in community spaces as well as external channels
-like social media. Violating these terms may lead to a temporary or
-permanent ban.
-
-#### 3. Temporary Ban
-
-**Community Impact**: A serious violation of community standards, including
-sustained inappropriate behavior.
-
-**Consequence**: A temporary ban from any sort of interaction or public
-communication with the community for a specified period of time. No public or
-private interaction with the people involved, including unsolicited interaction
-with those enforcing the Code of Conduct, is allowed during this period.
-Violating these terms may lead to a permanent ban.
-
-#### 4. Permanent Ban
-
-**Community Impact**: Demonstrating a pattern of violation of community
-standards, including sustained inappropriate behavior, harassment of an
-individual, or aggression toward or disparagement of classes of individuals.
-
-**Consequence**: A permanent ban from any sort of public interaction within
-the community.
-
-### Attribution
-
-This Code of Conduct is adapted from the [Contributor Covenant][homepage],
-version 2.0, available at
-[https://www.contributor-covenant.org/version/2/0/code_of_conduct.html][v2.0].
-
-Community Impact Guidelines were inspired by
-[Mozilla's code of conduct enforcement ladder][Mozilla CoC].
-
-For answers to common questions about this code of conduct, see the FAQ at
-[https://www.contributor-covenant.org/faq][FAQ]. Translations are available
-at [https://www.contributor-covenant.org/translations][translations].
-
-[homepage]: https://www.contributor-covenant.org
-[v2.0]: https://www.contributor-covenant.org/version/2/0/code_of_conduct.html
-[Mozilla CoC]: https://github.com/mozilla/diversity
-[FAQ]: https://www.contributor-covenant.org/faq
-[translations]: https://www.contributor-covenant.org/translations
diff --git a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/LICENSE b/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/LICENSE
deleted file mode 100644
index b1902a4e9..000000000
--- a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/LICENSE
+++ /dev/null
@@ -1,19 +0,0 @@
-Copyright (c) 2013-2023 Eduardo Gulias Davis
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is furnished
-to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
diff --git a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/composer.json b/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/composer.json
deleted file mode 100644
index bf1b3f4c9..000000000
--- a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/composer.json
+++ /dev/null
@@ -1,37 +0,0 @@
-{
- "name": "egulias/email-validator",
- "description": "A library for validating emails against several RFCs",
- "homepage": "https://github.com/egulias/EmailValidator",
- "keywords": ["email", "validation", "validator", "emailvalidation", "emailvalidator"],
- "license": "MIT",
- "authors": [
- {"name": "Eduardo Gulias Davis"}
- ],
- "extra": {
- "branch-alias": {
- "dev-master": "4.0.x-dev"
- }
- },
- "require": {
- "php": ">=8.1",
- "doctrine/lexer": "^2.0 || ^3.0",
- "symfony/polyfill-intl-idn": "^1.26"
- },
- "require-dev": {
- "phpunit/phpunit": "^10.2",
- "vimeo/psalm": "^5.12"
- },
- "suggest": {
- "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation"
- },
- "autoload": {
- "psr-4": {
- "Egulias\\EmailValidator\\": "src"
- }
- },
- "autoload-dev": {
- "psr-4": {
- "Egulias\\EmailValidator\\Tests\\": "tests"
- }
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/EmailLexer.php b/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/EmailLexer.php
deleted file mode 100644
index 969c049f8..000000000
--- a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/EmailLexer.php
+++ /dev/null
@@ -1,330 +0,0 @@
- */
-class EmailLexer extends AbstractLexer
-{
- //ASCII values
- public const S_EMPTY = -1;
- public const C_NUL = 0;
- public const S_HTAB = 9;
- public const S_LF = 10;
- public const S_CR = 13;
- public const S_SP = 32;
- public const EXCLAMATION = 33;
- public const S_DQUOTE = 34;
- public const NUMBER_SIGN = 35;
- public const DOLLAR = 36;
- public const PERCENTAGE = 37;
- public const AMPERSAND = 38;
- public const S_SQUOTE = 39;
- public const S_OPENPARENTHESIS = 40;
- public const S_CLOSEPARENTHESIS = 41;
- public const ASTERISK = 42;
- public const S_PLUS = 43;
- public const S_COMMA = 44;
- public const S_HYPHEN = 45;
- public const S_DOT = 46;
- public const S_SLASH = 47;
- public const S_COLON = 58;
- public const S_SEMICOLON = 59;
- public const S_LOWERTHAN = 60;
- public const S_EQUAL = 61;
- public const S_GREATERTHAN = 62;
- public const QUESTIONMARK = 63;
- public const S_AT = 64;
- public const S_OPENBRACKET = 91;
- public const S_BACKSLASH = 92;
- public const S_CLOSEBRACKET = 93;
- public const CARET = 94;
- public const S_UNDERSCORE = 95;
- public const S_BACKTICK = 96;
- public const S_OPENCURLYBRACES = 123;
- public const S_PIPE = 124;
- public const S_CLOSECURLYBRACES = 125;
- public const S_TILDE = 126;
- public const C_DEL = 127;
- public const INVERT_QUESTIONMARK = 168;
- public const INVERT_EXCLAMATION = 173;
- public const GENERIC = 300;
- public const S_IPV6TAG = 301;
- public const INVALID = 302;
- public const CRLF = 1310;
- public const S_DOUBLECOLON = 5858;
- public const ASCII_INVALID_FROM = 127;
- public const ASCII_INVALID_TO = 199;
-
- /**
- * US-ASCII visible characters not valid for atext (@link http://tools.ietf.org/html/rfc5322#section-3.2.3)
- *
- * @var array
- */
- protected $charValue = [
- '{' => self::S_OPENCURLYBRACES,
- '}' => self::S_CLOSECURLYBRACES,
- '(' => self::S_OPENPARENTHESIS,
- ')' => self::S_CLOSEPARENTHESIS,
- '<' => self::S_LOWERTHAN,
- '>' => self::S_GREATERTHAN,
- '[' => self::S_OPENBRACKET,
- ']' => self::S_CLOSEBRACKET,
- ':' => self::S_COLON,
- ';' => self::S_SEMICOLON,
- '@' => self::S_AT,
- '\\' => self::S_BACKSLASH,
- '/' => self::S_SLASH,
- ',' => self::S_COMMA,
- '.' => self::S_DOT,
- "'" => self::S_SQUOTE,
- "`" => self::S_BACKTICK,
- '"' => self::S_DQUOTE,
- '-' => self::S_HYPHEN,
- '::' => self::S_DOUBLECOLON,
- ' ' => self::S_SP,
- "\t" => self::S_HTAB,
- "\r" => self::S_CR,
- "\n" => self::S_LF,
- "\r\n" => self::CRLF,
- 'IPv6' => self::S_IPV6TAG,
- '' => self::S_EMPTY,
- '\0' => self::C_NUL,
- '*' => self::ASTERISK,
- '!' => self::EXCLAMATION,
- '&' => self::AMPERSAND,
- '^' => self::CARET,
- '$' => self::DOLLAR,
- '%' => self::PERCENTAGE,
- '~' => self::S_TILDE,
- '|' => self::S_PIPE,
- '_' => self::S_UNDERSCORE,
- '=' => self::S_EQUAL,
- '+' => self::S_PLUS,
- '¿' => self::INVERT_QUESTIONMARK,
- '?' => self::QUESTIONMARK,
- '#' => self::NUMBER_SIGN,
- '¡' => self::INVERT_EXCLAMATION,
- ];
-
- public const INVALID_CHARS_REGEX = "/[^\p{S}\p{C}\p{Cc}]+/iu";
-
- public const VALID_UTF8_REGEX = '/\p{Cc}+/u';
-
- public const CATCHABLE_PATTERNS = [
- '[a-zA-Z]+[46]?', //ASCII and domain literal
- '[^\x00-\x7F]', //UTF-8
- '[0-9]+',
- '\r\n',
- '::',
- '\s+?',
- '.',
- ];
-
- public const NON_CATCHABLE_PATTERNS = [
- '[\xA0-\xff]+',
- ];
-
- public const MODIFIERS = 'iu';
-
- /** @var bool */
- protected $hasInvalidTokens = false;
-
- /**
- * @var Token
- */
- protected Token $previous;
-
- /**
- * The last matched/seen token.
- *
- * @var Token
- */
- public Token $current;
-
- /**
- * @var Token
- */
- private Token $nullToken;
-
- /** @var string */
- private $accumulator = '';
-
- /** @var bool */
- private $hasToRecord = false;
-
- public function __construct()
- {
- /** @var Token $nullToken */
- $nullToken = new Token('', self::S_EMPTY, 0);
- $this->nullToken = $nullToken;
-
- $this->current = $this->previous = $this->nullToken;
- $this->lookahead = null;
- }
-
- public function reset(): void
- {
- $this->hasInvalidTokens = false;
- parent::reset();
- $this->current = $this->previous = $this->nullToken;
- }
-
- /**
- * @param int $type
- * @throws \UnexpectedValueException
- * @return boolean
- *
- * @psalm-suppress InvalidScalarArgument
- */
- public function find($type): bool
- {
- $search = clone $this;
- $search->skipUntil($type);
-
- if (!$search->lookahead) {
- throw new \UnexpectedValueException($type . ' not found');
- }
- return true;
- }
-
- /**
- * moveNext
- *
- * @return boolean
- */
- public function moveNext(): bool
- {
- if ($this->hasToRecord && $this->previous === $this->nullToken) {
- $this->accumulator .= $this->current->value;
- }
-
- $this->previous = $this->current;
-
- if ($this->lookahead === null) {
- $this->lookahead = $this->nullToken;
- }
-
- $hasNext = parent::moveNext();
- $this->current = $this->token ?? $this->nullToken;
-
- if ($this->hasToRecord) {
- $this->accumulator .= $this->current->value;
- }
-
- return $hasNext;
- }
-
- /**
- * Retrieve token type. Also processes the token value if necessary.
- *
- * @param string $value
- * @throws \InvalidArgumentException
- * @return integer
- */
- protected function getType(&$value): int
- {
- $encoded = $value;
-
- if (mb_detect_encoding($value, 'auto', true) !== 'UTF-8') {
- $encoded = mb_convert_encoding($value, 'UTF-8', 'Windows-1252');
- }
-
- if ($this->isValid($encoded)) {
- return $this->charValue[$encoded];
- }
-
- if ($this->isNullType($encoded)) {
- return self::C_NUL;
- }
-
- if ($this->isInvalidChar($encoded)) {
- $this->hasInvalidTokens = true;
- return self::INVALID;
- }
-
- return self::GENERIC;
- }
-
- protected function isValid(string $value): bool
- {
- return isset($this->charValue[$value]);
- }
-
- protected function isNullType(string $value): bool
- {
- return $value === "\0";
- }
-
- protected function isInvalidChar(string $value): bool
- {
- return !preg_match(self::INVALID_CHARS_REGEX, $value);
- }
-
- protected function isUTF8Invalid(string $value): bool
- {
- return preg_match(self::VALID_UTF8_REGEX, $value) !== false;
- }
-
- public function hasInvalidTokens(): bool
- {
- return $this->hasInvalidTokens;
- }
-
- /**
- * getPrevious
- *
- * @return Token
- */
- public function getPrevious(): Token
- {
- return $this->previous;
- }
-
- /**
- * Lexical catchable patterns.
- *
- * @return string[]
- */
- protected function getCatchablePatterns(): array
- {
- return self::CATCHABLE_PATTERNS;
- }
-
- /**
- * Lexical non-catchable patterns.
- *
- * @return string[]
- */
- protected function getNonCatchablePatterns(): array
- {
- return self::NON_CATCHABLE_PATTERNS;
- }
-
- protected function getModifiers(): string
- {
- return self::MODIFIERS;
- }
-
- public function getAccumulatedValues(): string
- {
- return $this->accumulator;
- }
-
- public function startRecording(): void
- {
- $this->hasToRecord = true;
- }
-
- public function stopRecording(): void
- {
- $this->hasToRecord = false;
- }
-
- public function clearRecorded(): void
- {
- $this->accumulator = '';
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/EmailParser.php b/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/EmailParser.php
deleted file mode 100644
index fc449c76f..000000000
--- a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/EmailParser.php
+++ /dev/null
@@ -1,90 +0,0 @@
-addLongEmailWarning($this->localPart, $this->domainPart);
-
- return $result;
- }
-
- protected function preLeftParsing(): Result
- {
- if (!$this->hasAtToken()) {
- return new InvalidEmail(new NoLocalPart(), $this->lexer->current->value);
- }
- return new ValidEmail();
- }
-
- protected function parseLeftFromAt(): Result
- {
- return $this->processLocalPart();
- }
-
- protected function parseRightFromAt(): Result
- {
- return $this->processDomainPart();
- }
-
- private function processLocalPart(): Result
- {
- $localPartParser = new LocalPart($this->lexer);
- $localPartResult = $localPartParser->parse();
- $this->localPart = $localPartParser->localPart();
- $this->warnings = [...$localPartParser->getWarnings(), ...$this->warnings];
-
- return $localPartResult;
- }
-
- private function processDomainPart(): Result
- {
- $domainPartParser = new DomainPart($this->lexer);
- $domainPartResult = $domainPartParser->parse();
- $this->domainPart = $domainPartParser->domainPart();
- $this->warnings = [...$domainPartParser->getWarnings(), ...$this->warnings];
-
- return $domainPartResult;
- }
-
- public function getDomainPart(): string
- {
- return $this->domainPart;
- }
-
- public function getLocalPart(): string
- {
- return $this->localPart;
- }
-
- private function addLongEmailWarning(string $localPart, string $parsedDomainPart): void
- {
- if (strlen($localPart . '@' . $parsedDomainPart) > self::EMAIL_MAX_LENGTH) {
- $this->warnings[EmailTooLong::CODE] = new EmailTooLong();
- }
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/EmailValidator.php b/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/EmailValidator.php
deleted file mode 100644
index 5a2e5c822..000000000
--- a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/EmailValidator.php
+++ /dev/null
@@ -1,67 +0,0 @@
-lexer = new EmailLexer();
- }
-
- /**
- * @param string $email
- * @param EmailValidation $emailValidation
- * @return bool
- */
- public function isValid(string $email, EmailValidation $emailValidation)
- {
- $isValid = $emailValidation->isValid($email, $this->lexer);
- $this->warnings = $emailValidation->getWarnings();
- $this->error = $emailValidation->getError();
-
- return $isValid;
- }
-
- /**
- * @return boolean
- */
- public function hasWarnings()
- {
- return !empty($this->warnings);
- }
-
- /**
- * @return array
- */
- public function getWarnings()
- {
- return $this->warnings;
- }
-
- /**
- * @return InvalidEmail|null
- */
- public function getError()
- {
- return $this->error;
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/MessageIDParser.php b/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/MessageIDParser.php
deleted file mode 100644
index 35bd0a7f1..000000000
--- a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/MessageIDParser.php
+++ /dev/null
@@ -1,91 +0,0 @@
-addLongEmailWarning($this->idLeft, $this->idRight);
-
- return $result;
- }
-
- protected function preLeftParsing(): Result
- {
- if (!$this->hasAtToken()) {
- return new InvalidEmail(new NoLocalPart(), $this->lexer->current->value);
- }
- return new ValidEmail();
- }
-
- protected function parseLeftFromAt(): Result
- {
- return $this->processIDLeft();
- }
-
- protected function parseRightFromAt(): Result
- {
- return $this->processIDRight();
- }
-
- private function processIDLeft(): Result
- {
- $localPartParser = new IDLeftPart($this->lexer);
- $localPartResult = $localPartParser->parse();
- $this->idLeft = $localPartParser->localPart();
- $this->warnings = [...$localPartParser->getWarnings(), ...$this->warnings];
-
- return $localPartResult;
- }
-
- private function processIDRight(): Result
- {
- $domainPartParser = new IDRightPart($this->lexer);
- $domainPartResult = $domainPartParser->parse();
- $this->idRight = $domainPartParser->domainPart();
- $this->warnings = [...$domainPartParser->getWarnings(), ...$this->warnings];
-
- return $domainPartResult;
- }
-
- public function getLeftPart(): string
- {
- return $this->idLeft;
- }
-
- public function getRightPart(): string
- {
- return $this->idRight;
- }
-
- private function addLongEmailWarning(string $localPart, string $parsedDomainPart): void
- {
- if (strlen($localPart . '@' . $parsedDomainPart) > self::EMAILID_MAX_LENGTH) {
- $this->warnings[EmailTooLong::CODE] = new EmailTooLong();
- }
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Parser.php b/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Parser.php
deleted file mode 100644
index d577e3eae..000000000
--- a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Parser.php
+++ /dev/null
@@ -1,78 +0,0 @@
-lexer = $lexer;
- }
-
- public function parse(string $str): Result
- {
- $this->lexer->setInput($str);
-
- if ($this->lexer->hasInvalidTokens()) {
- return new InvalidEmail(new ExpectingATEXT("Invalid tokens found"), $this->lexer->current->value);
- }
-
- $preParsingResult = $this->preLeftParsing();
- if ($preParsingResult->isInvalid()) {
- return $preParsingResult;
- }
-
- $localPartResult = $this->parseLeftFromAt();
-
- if ($localPartResult->isInvalid()) {
- return $localPartResult;
- }
-
- $domainPartResult = $this->parseRightFromAt();
-
- if ($domainPartResult->isInvalid()) {
- return $domainPartResult;
- }
-
- return new ValidEmail();
- }
-
- /**
- * @return Warning\Warning[]
- */
- public function getWarnings(): array
- {
- return $this->warnings;
- }
-
- protected function hasAtToken(): bool
- {
- $this->lexer->moveNext();
- $this->lexer->moveNext();
-
- return !$this->lexer->current->isA(EmailLexer::S_AT);
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Parser/Comment.php b/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Parser/Comment.php
deleted file mode 100644
index 7b5b47e29..000000000
--- a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Parser/Comment.php
+++ /dev/null
@@ -1,102 +0,0 @@
-lexer = $lexer;
- $this->commentStrategy = $commentStrategy;
- }
-
- public function parse(): Result
- {
- if ($this->lexer->current->isA(EmailLexer::S_OPENPARENTHESIS)) {
- $this->openedParenthesis++;
- if ($this->noClosingParenthesis()) {
- return new InvalidEmail(new UnclosedComment(), $this->lexer->current->value);
- }
- }
-
- if ($this->lexer->current->isA(EmailLexer::S_CLOSEPARENTHESIS)) {
- return new InvalidEmail(new UnOpenedComment(), $this->lexer->current->value);
- }
-
- $this->warnings[WarningComment::CODE] = new WarningComment();
-
- $moreTokens = true;
- while ($this->commentStrategy->exitCondition($this->lexer, $this->openedParenthesis) && $moreTokens) {
-
- if ($this->lexer->isNextToken(EmailLexer::S_OPENPARENTHESIS)) {
- $this->openedParenthesis++;
- }
- $this->warnEscaping();
- if ($this->lexer->isNextToken(EmailLexer::S_CLOSEPARENTHESIS)) {
- $this->openedParenthesis--;
- }
- $moreTokens = $this->lexer->moveNext();
- }
-
- if ($this->openedParenthesis >= 1) {
- return new InvalidEmail(new UnclosedComment(), $this->lexer->current->value);
- }
- if ($this->openedParenthesis < 0) {
- return new InvalidEmail(new UnOpenedComment(), $this->lexer->current->value);
- }
-
- $finalValidations = $this->commentStrategy->endOfLoopValidations($this->lexer);
-
- $this->warnings = [...$this->warnings, ...$this->commentStrategy->getWarnings()];
-
- return $finalValidations;
- }
-
-
- /**
- * @return void
- */
- private function warnEscaping(): void
- {
- //Backslash found
- if (!$this->lexer->current->isA(EmailLexer::S_BACKSLASH)) {
- return;
- }
-
- if (!$this->lexer->isNextTokenAny(array(EmailLexer::S_SP, EmailLexer::S_HTAB, EmailLexer::C_DEL))) {
- return;
- }
-
- $this->warnings[QuotedPart::CODE] =
- new QuotedPart($this->lexer->getPrevious()->type, $this->lexer->current->type);
- }
-
- private function noClosingParenthesis(): bool
- {
- try {
- $this->lexer->find(EmailLexer::S_CLOSEPARENTHESIS);
- return false;
- } catch (\RuntimeException $e) {
- return true;
- }
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Parser/CommentStrategy/CommentStrategy.php b/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Parser/CommentStrategy/CommentStrategy.php
deleted file mode 100644
index 8834db04c..000000000
--- a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Parser/CommentStrategy/CommentStrategy.php
+++ /dev/null
@@ -1,22 +0,0 @@
-isNextToken(EmailLexer::S_DOT));
- }
-
- public function endOfLoopValidations(EmailLexer $lexer): Result
- {
- //test for end of string
- if (!$lexer->isNextToken(EmailLexer::S_DOT)) {
- return new InvalidEmail(new ExpectingATEXT('DOT not found near CLOSEPARENTHESIS'), $lexer->current->value);
- }
- //add warning
- //Address is valid within the message but cannot be used unmodified for the envelope
- return new ValidEmail();
- }
-
- public function getWarnings(): array
- {
- return [];
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Parser/CommentStrategy/LocalComment.php b/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Parser/CommentStrategy/LocalComment.php
deleted file mode 100644
index 5c18b440b..000000000
--- a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Parser/CommentStrategy/LocalComment.php
+++ /dev/null
@@ -1,37 +0,0 @@
-isNextToken(EmailLexer::S_AT);
- }
-
- public function endOfLoopValidations(EmailLexer $lexer): Result
- {
- if (!$lexer->isNextToken(EmailLexer::S_AT)) {
- return new InvalidEmail(new ExpectingATEXT('ATEX is not expected after closing comments'), $lexer->current->value);
- }
- $this->warnings[CFWSNearAt::CODE] = new CFWSNearAt();
- return new ValidEmail();
- }
-
- public function getWarnings(): array
- {
- return $this->warnings;
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Parser/DomainLiteral.php b/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Parser/DomainLiteral.php
deleted file mode 100644
index 5093e5083..000000000
--- a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Parser/DomainLiteral.php
+++ /dev/null
@@ -1,210 +0,0 @@
-addTagWarnings();
-
- $IPv6TAG = false;
- $addressLiteral = '';
-
- do {
- if ($this->lexer->current->isA(EmailLexer::C_NUL)) {
- return new InvalidEmail(new ExpectingDTEXT(), $this->lexer->current->value);
- }
-
- $this->addObsoleteWarnings();
-
- if ($this->lexer->isNextTokenAny(array(EmailLexer::S_OPENBRACKET, EmailLexer::S_OPENBRACKET))) {
- return new InvalidEmail(new ExpectingDTEXT(), $this->lexer->current->value);
- }
-
- if ($this->lexer->isNextTokenAny(
- array(EmailLexer::S_HTAB, EmailLexer::S_SP, EmailLexer::CRLF)
- )) {
- $this->warnings[CFWSWithFWS::CODE] = new CFWSWithFWS();
- $this->parseFWS();
- }
-
- if ($this->lexer->isNextToken(EmailLexer::S_CR)) {
- return new InvalidEmail(new CRNoLF(), $this->lexer->current->value);
- }
-
- if ($this->lexer->current->isA(EmailLexer::S_BACKSLASH)) {
- return new InvalidEmail(new UnusualElements($this->lexer->current->value), $this->lexer->current->value);
- }
- if ($this->lexer->current->isA(EmailLexer::S_IPV6TAG)) {
- $IPv6TAG = true;
- }
-
- if ($this->lexer->current->isA(EmailLexer::S_CLOSEBRACKET)) {
- break;
- }
-
- $addressLiteral .= $this->lexer->current->value;
- } while ($this->lexer->moveNext());
-
-
- //Encapsulate
- $addressLiteral = str_replace('[', '', $addressLiteral);
- $isAddressLiteralIPv4 = $this->checkIPV4Tag($addressLiteral);
-
- if (!$isAddressLiteralIPv4) {
- return new ValidEmail();
- }
-
- $addressLiteral = $this->convertIPv4ToIPv6($addressLiteral);
-
- if (!$IPv6TAG) {
- $this->warnings[WarningDomainLiteral::CODE] = new WarningDomainLiteral();
- return new ValidEmail();
- }
-
- $this->warnings[AddressLiteral::CODE] = new AddressLiteral();
-
- $this->checkIPV6Tag($addressLiteral);
-
- return new ValidEmail();
- }
-
- /**
- * @param string $addressLiteral
- * @param int $maxGroups
- */
- public function checkIPV6Tag($addressLiteral, $maxGroups = 8): void
- {
- $prev = $this->lexer->getPrevious();
- if ($prev->isA(EmailLexer::S_COLON)) {
- $this->warnings[IPV6ColonEnd::CODE] = new IPV6ColonEnd();
- }
-
- $IPv6 = substr($addressLiteral, 5);
- //Daniel Marschall's new IPv6 testing strategy
- $matchesIP = explode(':', $IPv6);
- $groupCount = count($matchesIP);
- $colons = strpos($IPv6, '::');
-
- if (count(preg_grep('/^[0-9A-Fa-f]{0,4}$/', $matchesIP, PREG_GREP_INVERT)) !== 0) {
- $this->warnings[IPV6BadChar::CODE] = new IPV6BadChar();
- }
-
- if ($colons === false) {
- // We need exactly the right number of groups
- if ($groupCount !== $maxGroups) {
- $this->warnings[IPV6GroupCount::CODE] = new IPV6GroupCount();
- }
- return;
- }
-
- if ($colons !== strrpos($IPv6, '::')) {
- $this->warnings[IPV6DoubleColon::CODE] = new IPV6DoubleColon();
- return;
- }
-
- if ($colons === 0 || $colons === (strlen($IPv6) - 2)) {
- // RFC 4291 allows :: at the start or end of an address
- //with 7 other groups in addition
- ++$maxGroups;
- }
-
- if ($groupCount > $maxGroups) {
- $this->warnings[IPV6MaxGroups::CODE] = new IPV6MaxGroups();
- } elseif ($groupCount === $maxGroups) {
- $this->warnings[IPV6Deprecated::CODE] = new IPV6Deprecated();
- }
- }
-
- public function convertIPv4ToIPv6(string $addressLiteralIPv4): string
- {
- $matchesIP = [];
- $IPv4Match = preg_match(self::IPV4_REGEX, $addressLiteralIPv4, $matchesIP);
-
- // Extract IPv4 part from the end of the address-literal (if there is one)
- if ($IPv4Match > 0) {
- $index = (int) strrpos($addressLiteralIPv4, $matchesIP[0]);
- //There's a match but it is at the start
- if ($index > 0) {
- // Convert IPv4 part to IPv6 format for further testing
- return substr($addressLiteralIPv4, 0, $index) . '0:0';
- }
- }
-
- return $addressLiteralIPv4;
- }
-
- /**
- * @param string $addressLiteral
- *
- * @return bool
- */
- protected function checkIPV4Tag($addressLiteral): bool
- {
- $matchesIP = [];
- $IPv4Match = preg_match(self::IPV4_REGEX, $addressLiteral, $matchesIP);
-
- // Extract IPv4 part from the end of the address-literal (if there is one)
-
- if ($IPv4Match > 0) {
- $index = strrpos($addressLiteral, $matchesIP[0]);
- //There's a match but it is at the start
- if ($index === 0) {
- $this->warnings[AddressLiteral::CODE] = new AddressLiteral();
- return false;
- }
- }
-
- return true;
- }
-
- private function addObsoleteWarnings(): void
- {
- if (in_array($this->lexer->current->type, self::OBSOLETE_WARNINGS)) {
- $this->warnings[ObsoleteDTEXT::CODE] = new ObsoleteDTEXT();
- }
- }
-
- private function addTagWarnings(): void
- {
- if ($this->lexer->isNextToken(EmailLexer::S_COLON)) {
- $this->warnings[IPV6ColonStart::CODE] = new IPV6ColonStart();
- }
- if ($this->lexer->isNextToken(EmailLexer::S_IPV6TAG)) {
- $lexer = clone $this->lexer;
- $lexer->moveNext();
- if ($lexer->isNextToken(EmailLexer::S_DOUBLECOLON)) {
- $this->warnings[IPV6ColonStart::CODE] = new IPV6ColonStart();
- }
- }
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Parser/DomainPart.php b/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Parser/DomainPart.php
deleted file mode 100644
index a1a56cf3d..000000000
--- a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Parser/DomainPart.php
+++ /dev/null
@@ -1,326 +0,0 @@
-lexer->clearRecorded();
- $this->lexer->startRecording();
-
- $this->lexer->moveNext();
-
- $domainChecks = $this->performDomainStartChecks();
- if ($domainChecks->isInvalid()) {
- return $domainChecks;
- }
-
- if ($this->lexer->current->isA(EmailLexer::S_AT)) {
- return new InvalidEmail(new ConsecutiveAt(), $this->lexer->current->value);
- }
-
- $result = $this->doParseDomainPart();
- if ($result->isInvalid()) {
- return $result;
- }
-
- $end = $this->checkEndOfDomain();
- if ($end->isInvalid()) {
- return $end;
- }
-
- $this->lexer->stopRecording();
- $this->domainPart = $this->lexer->getAccumulatedValues();
-
- $length = strlen($this->domainPart);
- if ($length > self::DOMAIN_MAX_LENGTH) {
- return new InvalidEmail(new DomainTooLong(), $this->lexer->current->value);
- }
-
- return new ValidEmail();
- }
-
- private function checkEndOfDomain(): Result
- {
- $prev = $this->lexer->getPrevious();
- if ($prev->isA(EmailLexer::S_DOT)) {
- return new InvalidEmail(new DotAtEnd(), $this->lexer->current->value);
- }
- if ($prev->isA(EmailLexer::S_HYPHEN)) {
- return new InvalidEmail(new DomainHyphened('Hypen found at the end of the domain'), $prev->value);
- }
-
- if ($this->lexer->current->isA(EmailLexer::S_SP)) {
- return new InvalidEmail(new CRLFAtTheEnd(), $prev->value);
- }
- return new ValidEmail();
- }
-
- private function performDomainStartChecks(): Result
- {
- $invalidTokens = $this->checkInvalidTokensAfterAT();
- if ($invalidTokens->isInvalid()) {
- return $invalidTokens;
- }
-
- $missingDomain = $this->checkEmptyDomain();
- if ($missingDomain->isInvalid()) {
- return $missingDomain;
- }
-
- if ($this->lexer->current->isA(EmailLexer::S_OPENPARENTHESIS)) {
- $this->warnings[DeprecatedComment::CODE] = new DeprecatedComment();
- }
- return new ValidEmail();
- }
-
- private function checkEmptyDomain(): Result
- {
- $thereIsNoDomain = $this->lexer->current->isA(EmailLexer::S_EMPTY) ||
- ($this->lexer->current->isA(EmailLexer::S_SP) &&
- !$this->lexer->isNextToken(EmailLexer::GENERIC));
-
- if ($thereIsNoDomain) {
- return new InvalidEmail(new NoDomainPart(), $this->lexer->current->value);
- }
-
- return new ValidEmail();
- }
-
- private function checkInvalidTokensAfterAT(): Result
- {
- if ($this->lexer->current->isA(EmailLexer::S_DOT)) {
- return new InvalidEmail(new DotAtStart(), $this->lexer->current->value);
- }
- if ($this->lexer->current->isA(EmailLexer::S_HYPHEN)) {
- return new InvalidEmail(new DomainHyphened('After AT'), $this->lexer->current->value);
- }
- return new ValidEmail();
- }
-
- protected function parseComments(): Result
- {
- $commentParser = new Comment($this->lexer, new DomainComment());
- $result = $commentParser->parse();
- $this->warnings = [...$this->warnings, ...$commentParser->getWarnings()];
-
- return $result;
- }
-
- protected function doParseDomainPart(): Result
- {
- $tldMissing = true;
- $hasComments = false;
- $domain = '';
- do {
- $prev = $this->lexer->getPrevious();
-
- $notAllowedChars = $this->checkNotAllowedChars($this->lexer->current);
- if ($notAllowedChars->isInvalid()) {
- return $notAllowedChars;
- }
-
- if (
- $this->lexer->current->isA(EmailLexer::S_OPENPARENTHESIS) ||
- $this->lexer->current->isA(EmailLexer::S_CLOSEPARENTHESIS)
- ) {
- $hasComments = true;
- $commentsResult = $this->parseComments();
-
- //Invalid comment parsing
- if ($commentsResult->isInvalid()) {
- return $commentsResult;
- }
- }
-
- $dotsResult = $this->checkConsecutiveDots();
- if ($dotsResult->isInvalid()) {
- return $dotsResult;
- }
-
- if ($this->lexer->current->isA(EmailLexer::S_OPENBRACKET)) {
- $literalResult = $this->parseDomainLiteral();
-
- $this->addTLDWarnings($tldMissing);
- return $literalResult;
- }
-
- $labelCheck = $this->checkLabelLength();
- if ($labelCheck->isInvalid()) {
- return $labelCheck;
- }
-
- $FwsResult = $this->parseFWS();
- if ($FwsResult->isInvalid()) {
- return $FwsResult;
- }
-
- $domain .= $this->lexer->current->value;
-
- if ($this->lexer->current->isA(EmailLexer::S_DOT) && $this->lexer->isNextToken(EmailLexer::GENERIC)) {
- $tldMissing = false;
- }
-
- $exceptionsResult = $this->checkDomainPartExceptions($prev, $hasComments);
- if ($exceptionsResult->isInvalid()) {
- return $exceptionsResult;
- }
- $this->lexer->moveNext();
- } while (!$this->lexer->current->isA(EmailLexer::S_EMPTY));
-
- $labelCheck = $this->checkLabelLength(true);
- if ($labelCheck->isInvalid()) {
- return $labelCheck;
- }
- $this->addTLDWarnings($tldMissing);
-
- $this->domainPart = $domain;
- return new ValidEmail();
- }
-
- /**
- * @param Token $token
- *
- * @return Result
- */
- private function checkNotAllowedChars(Token $token): Result
- {
- $notAllowed = [EmailLexer::S_BACKSLASH => true, EmailLexer::S_SLASH => true];
- if (isset($notAllowed[$token->type])) {
- return new InvalidEmail(new CharNotAllowed(), $token->value);
- }
- return new ValidEmail();
- }
-
- /**
- * @return Result
- */
- protected function parseDomainLiteral(): Result
- {
- try {
- $this->lexer->find(EmailLexer::S_CLOSEBRACKET);
- } catch (\RuntimeException $e) {
- return new InvalidEmail(new ExpectingDomainLiteralClose(), $this->lexer->current->value);
- }
-
- $domainLiteralParser = new DomainLiteralParser($this->lexer);
- $result = $domainLiteralParser->parse();
- $this->warnings = [...$this->warnings, ...$domainLiteralParser->getWarnings()];
- return $result;
- }
-
- /**
- * @param Token $prev
- * @param bool $hasComments
- *
- * @return Result
- */
- protected function checkDomainPartExceptions(Token $prev, bool $hasComments): Result
- {
- if ($this->lexer->current->isA(EmailLexer::S_OPENBRACKET) && $prev->type !== EmailLexer::S_AT) {
- return new InvalidEmail(new ExpectingATEXT('OPENBRACKET not after AT'), $this->lexer->current->value);
- }
-
- if ($this->lexer->current->isA(EmailLexer::S_HYPHEN) && $this->lexer->isNextToken(EmailLexer::S_DOT)) {
- return new InvalidEmail(new DomainHyphened('Hypen found near DOT'), $this->lexer->current->value);
- }
-
- if (
- $this->lexer->current->isA(EmailLexer::S_BACKSLASH)
- && $this->lexer->isNextToken(EmailLexer::GENERIC)
- ) {
- return new InvalidEmail(new ExpectingATEXT('Escaping following "ATOM"'), $this->lexer->current->value);
- }
-
- return $this->validateTokens($hasComments);
- }
-
- protected function validateTokens(bool $hasComments): Result
- {
- $validDomainTokens = array(
- EmailLexer::GENERIC => true,
- EmailLexer::S_HYPHEN => true,
- EmailLexer::S_DOT => true,
- );
-
- if ($hasComments) {
- $validDomainTokens[EmailLexer::S_OPENPARENTHESIS] = true;
- $validDomainTokens[EmailLexer::S_CLOSEPARENTHESIS] = true;
- }
-
- if (!isset($validDomainTokens[$this->lexer->current->type])) {
- return new InvalidEmail(new ExpectingATEXT('Invalid token in domain: ' . $this->lexer->current->value), $this->lexer->current->value);
- }
-
- return new ValidEmail();
- }
-
- private function checkLabelLength(bool $isEndOfDomain = false): Result
- {
- if ($this->lexer->current->isA(EmailLexer::S_DOT) || $isEndOfDomain) {
- if ($this->isLabelTooLong($this->label)) {
- return new InvalidEmail(new LabelTooLong(), $this->lexer->current->value);
- }
- $this->label = '';
- }
- $this->label .= $this->lexer->current->value;
- return new ValidEmail();
- }
-
-
- private function isLabelTooLong(string $label): bool
- {
- if (preg_match('/[^\x00-\x7F]/', $label)) {
- idn_to_ascii($label, IDNA_DEFAULT, INTL_IDNA_VARIANT_UTS46, $idnaInfo);
- return (bool) ($idnaInfo['errors'] & IDNA_ERROR_LABEL_TOO_LONG);
- }
- return strlen($label) > self::LABEL_MAX_LENGTH;
- }
-
- private function addTLDWarnings(bool $isTLDMissing): void
- {
- if ($isTLDMissing) {
- $this->warnings[TLD::CODE] = new TLD();
- }
- }
-
- public function domainPart(): string
- {
- return $this->domainPart;
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Parser/DoubleQuote.php b/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Parser/DoubleQuote.php
deleted file mode 100644
index b5335d300..000000000
--- a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Parser/DoubleQuote.php
+++ /dev/null
@@ -1,91 +0,0 @@
-checkDQUOTE();
- if ($validQuotedString->isInvalid()) {
- return $validQuotedString;
- }
-
- $special = [
- EmailLexer::S_CR => true,
- EmailLexer::S_HTAB => true,
- EmailLexer::S_LF => true
- ];
-
- $invalid = [
- EmailLexer::C_NUL => true,
- EmailLexer::S_HTAB => true,
- EmailLexer::S_CR => true,
- EmailLexer::S_LF => true
- ];
-
- $setSpecialsWarning = true;
-
- $this->lexer->moveNext();
-
- while (!$this->lexer->current->isA(EmailLexer::S_DQUOTE) && !$this->lexer->current->isA(EmailLexer::S_EMPTY)) {
- if (isset($special[$this->lexer->current->type]) && $setSpecialsWarning) {
- $this->warnings[CFWSWithFWS::CODE] = new CFWSWithFWS();
- $setSpecialsWarning = false;
- }
- if ($this->lexer->current->isA(EmailLexer::S_BACKSLASH) && $this->lexer->isNextToken(EmailLexer::S_DQUOTE)) {
- $this->lexer->moveNext();
- }
-
- $this->lexer->moveNext();
-
- if (!$this->escaped() && isset($invalid[$this->lexer->current->type])) {
- return new InvalidEmail(new ExpectingATEXT("Expecting ATEXT between DQUOTE"), $this->lexer->current->value);
- }
- }
-
- $prev = $this->lexer->getPrevious();
-
- if ($prev->isA(EmailLexer::S_BACKSLASH)) {
- $validQuotedString = $this->checkDQUOTE();
- if ($validQuotedString->isInvalid()) {
- return $validQuotedString;
- }
- }
-
- if (!$this->lexer->isNextToken(EmailLexer::S_AT) && !$prev->isA(EmailLexer::S_BACKSLASH)) {
- return new InvalidEmail(new ExpectingATEXT("Expecting ATEXT between DQUOTE"), $this->lexer->current->value);
- }
-
- return new ValidEmail();
- }
-
- protected function checkDQUOTE(): Result
- {
- $previous = $this->lexer->getPrevious();
-
- if ($this->lexer->isNextToken(EmailLexer::GENERIC) && $previous->isA(EmailLexer::GENERIC)) {
- $description = 'https://tools.ietf.org/html/rfc5322#section-3.2.4 - quoted string should be a unit';
- return new InvalidEmail(new ExpectingATEXT($description), $this->lexer->current->value);
- }
-
- try {
- $this->lexer->find(EmailLexer::S_DQUOTE);
- } catch (\Exception $e) {
- return new InvalidEmail(new UnclosedQuotedString(), $this->lexer->current->value);
- }
- $this->warnings[QuotedString::CODE] = new QuotedString($previous->value, $this->lexer->current->value);
-
- return new ValidEmail();
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Parser/FoldingWhiteSpace.php b/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Parser/FoldingWhiteSpace.php
deleted file mode 100644
index 348a7af44..000000000
--- a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Parser/FoldingWhiteSpace.php
+++ /dev/null
@@ -1,87 +0,0 @@
-isFWS()) {
- return new ValidEmail();
- }
-
- $previous = $this->lexer->getPrevious();
-
- $resultCRLF = $this->checkCRLFInFWS();
- if ($resultCRLF->isInvalid()) {
- return $resultCRLF;
- }
-
- if ($this->lexer->current->isA(EmailLexer::S_CR)) {
- return new InvalidEmail(new CRNoLF(), $this->lexer->current->value);
- }
-
- if ($this->lexer->isNextToken(EmailLexer::GENERIC) && !$previous->isA(EmailLexer::S_AT)) {
- return new InvalidEmail(new AtextAfterCFWS(), $this->lexer->current->value);
- }
-
- if ($this->lexer->current->isA(EmailLexer::S_LF) || $this->lexer->current->isA(EmailLexer::C_NUL)) {
- return new InvalidEmail(new ExpectingCTEXT(), $this->lexer->current->value);
- }
-
- if ($this->lexer->isNextToken(EmailLexer::S_AT) || $previous->isA(EmailLexer::S_AT)) {
- $this->warnings[CFWSNearAt::CODE] = new CFWSNearAt();
- } else {
- $this->warnings[CFWSWithFWS::CODE] = new CFWSWithFWS();
- }
-
- return new ValidEmail();
- }
-
- protected function checkCRLFInFWS(): Result
- {
- if (!$this->lexer->current->isA(EmailLexer::CRLF)) {
- return new ValidEmail();
- }
-
- if (!$this->lexer->isNextTokenAny(array(EmailLexer::S_SP, EmailLexer::S_HTAB))) {
- return new InvalidEmail(new CRLFX2(), $this->lexer->current->value);
- }
-
- //this has no coverage. Condition is repeated from above one
- if (!$this->lexer->isNextTokenAny(array(EmailLexer::S_SP, EmailLexer::S_HTAB))) {
- return new InvalidEmail(new CRLFAtTheEnd(), $this->lexer->current->value);
- }
-
- return new ValidEmail();
- }
-
- protected function isFWS(): bool
- {
- if ($this->escaped()) {
- return false;
- }
-
- return in_array($this->lexer->current->type, self::FWS_TYPES);
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Parser/IDLeftPart.php b/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Parser/IDLeftPart.php
deleted file mode 100644
index bedcf7b20..000000000
--- a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Parser/IDLeftPart.php
+++ /dev/null
@@ -1,15 +0,0 @@
-lexer->current->value);
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Parser/IDRightPart.php b/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Parser/IDRightPart.php
deleted file mode 100644
index d2fc1d748..000000000
--- a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Parser/IDRightPart.php
+++ /dev/null
@@ -1,29 +0,0 @@
- true,
- EmailLexer::S_SQUOTE => true,
- EmailLexer::S_BACKTICK => true,
- EmailLexer::S_SEMICOLON => true,
- EmailLexer::S_GREATERTHAN => true,
- EmailLexer::S_LOWERTHAN => true,
- ];
-
- if (isset($invalidDomainTokens[$this->lexer->current->type])) {
- return new InvalidEmail(new ExpectingATEXT('Invalid token in domain: ' . $this->lexer->current->value), $this->lexer->current->value);
- }
- return new ValidEmail();
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Parser/LocalPart.php b/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Parser/LocalPart.php
deleted file mode 100644
index 5ed29d606..000000000
--- a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Parser/LocalPart.php
+++ /dev/null
@@ -1,162 +0,0 @@
- EmailLexer::S_COMMA,
- EmailLexer::S_CLOSEBRACKET => EmailLexer::S_CLOSEBRACKET,
- EmailLexer::S_OPENBRACKET => EmailLexer::S_OPENBRACKET,
- EmailLexer::S_GREATERTHAN => EmailLexer::S_GREATERTHAN,
- EmailLexer::S_LOWERTHAN => EmailLexer::S_LOWERTHAN,
- EmailLexer::S_COLON => EmailLexer::S_COLON,
- EmailLexer::S_SEMICOLON => EmailLexer::S_SEMICOLON,
- EmailLexer::INVALID => EmailLexer::INVALID
- ];
-
- /**
- * @var string
- */
- private $localPart = '';
-
-
- public function parse(): Result
- {
- $this->lexer->startRecording();
-
- while (!$this->lexer->current->isA(EmailLexer::S_AT) && !$this->lexer->current->isA(EmailLexer::S_EMPTY)) {
- if ($this->hasDotAtStart()) {
- return new InvalidEmail(new DotAtStart(), $this->lexer->current->value);
- }
-
- if ($this->lexer->current->isA(EmailLexer::S_DQUOTE)) {
- $dquoteParsingResult = $this->parseDoubleQuote();
-
- //Invalid double quote parsing
- if ($dquoteParsingResult->isInvalid()) {
- return $dquoteParsingResult;
- }
- }
-
- if (
- $this->lexer->current->isA(EmailLexer::S_OPENPARENTHESIS) ||
- $this->lexer->current->isA(EmailLexer::S_CLOSEPARENTHESIS)
- ) {
- $commentsResult = $this->parseComments();
-
- //Invalid comment parsing
- if ($commentsResult->isInvalid()) {
- return $commentsResult;
- }
- }
-
- if ($this->lexer->current->isA(EmailLexer::S_DOT) && $this->lexer->isNextToken(EmailLexer::S_DOT)) {
- return new InvalidEmail(new ConsecutiveDot(), $this->lexer->current->value);
- }
-
- if (
- $this->lexer->current->isA(EmailLexer::S_DOT) &&
- $this->lexer->isNextToken(EmailLexer::S_AT)
- ) {
- return new InvalidEmail(new DotAtEnd(), $this->lexer->current->value);
- }
-
- $resultEscaping = $this->validateEscaping();
- if ($resultEscaping->isInvalid()) {
- return $resultEscaping;
- }
-
- $resultToken = $this->validateTokens(false);
- if ($resultToken->isInvalid()) {
- return $resultToken;
- }
-
- $resultFWS = $this->parseLocalFWS();
- if ($resultFWS->isInvalid()) {
- return $resultFWS;
- }
-
- $this->lexer->moveNext();
- }
-
- $this->lexer->stopRecording();
- $this->localPart = rtrim($this->lexer->getAccumulatedValues(), '@');
- if (strlen($this->localPart) > LocalTooLong::LOCAL_PART_LENGTH) {
- $this->warnings[LocalTooLong::CODE] = new LocalTooLong();
- }
-
- return new ValidEmail();
- }
-
- protected function validateTokens(bool $hasComments): Result
- {
- if (isset(self::INVALID_TOKENS[$this->lexer->current->type])) {
- return new InvalidEmail(new ExpectingATEXT('Invalid token found'), $this->lexer->current->value);
- }
- return new ValidEmail();
- }
-
- public function localPart(): string
- {
- return $this->localPart;
- }
-
- private function parseLocalFWS(): Result
- {
- $foldingWS = new FoldingWhiteSpace($this->lexer);
- $resultFWS = $foldingWS->parse();
- if ($resultFWS->isValid()) {
- $this->warnings = [...$this->warnings, ...$foldingWS->getWarnings()];
- }
- return $resultFWS;
- }
-
- private function hasDotAtStart(): bool
- {
- return $this->lexer->current->isA(EmailLexer::S_DOT) && $this->lexer->getPrevious()->isA(EmailLexer::S_EMPTY);
- }
-
- private function parseDoubleQuote(): Result
- {
- $dquoteParser = new DoubleQuote($this->lexer);
- $parseAgain = $dquoteParser->parse();
- $this->warnings = [...$this->warnings, ...$dquoteParser->getWarnings()];
-
- return $parseAgain;
- }
-
- protected function parseComments(): Result
- {
- $commentParser = new Comment($this->lexer, new LocalComment());
- $result = $commentParser->parse();
- $this->warnings = [...$this->warnings, ...$commentParser->getWarnings()];
-
- return $result;
- }
-
- private function validateEscaping(): Result
- {
- //Backslash found
- if (!$this->lexer->current->isA(EmailLexer::S_BACKSLASH)) {
- return new ValidEmail();
- }
-
- if ($this->lexer->isNextToken(EmailLexer::GENERIC)) {
- return new InvalidEmail(new ExpectingATEXT('Found ATOM after escaping'), $this->lexer->current->value);
- }
-
- return new ValidEmail();
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Parser/PartParser.php b/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Parser/PartParser.php
deleted file mode 100644
index 53afb2575..000000000
--- a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Parser/PartParser.php
+++ /dev/null
@@ -1,63 +0,0 @@
-lexer = $lexer;
- }
-
- abstract public function parse(): Result;
-
- /**
- * @return Warning[]
- */
- public function getWarnings()
- {
- return $this->warnings;
- }
-
- protected function parseFWS(): Result
- {
- $foldingWS = new FoldingWhiteSpace($this->lexer);
- $resultFWS = $foldingWS->parse();
- $this->warnings = [...$this->warnings, ...$foldingWS->getWarnings()];
- return $resultFWS;
- }
-
- protected function checkConsecutiveDots(): Result
- {
- if ($this->lexer->current->isA(EmailLexer::S_DOT) && $this->lexer->isNextToken(EmailLexer::S_DOT)) {
- return new InvalidEmail(new ConsecutiveDot(), $this->lexer->current->value);
- }
-
- return new ValidEmail();
- }
-
- protected function escaped(): bool
- {
- $previous = $this->lexer->getPrevious();
-
- return $previous->isA(EmailLexer::S_BACKSLASH)
- && !$this->lexer->current->isA(EmailLexer::GENERIC);
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Result/InvalidEmail.php b/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Result/InvalidEmail.php
deleted file mode 100644
index 82699acc6..000000000
--- a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Result/InvalidEmail.php
+++ /dev/null
@@ -1,49 +0,0 @@
-token = $token;
- $this->reason = $reason;
- }
-
- public function isValid(): bool
- {
- return false;
- }
-
- public function isInvalid(): bool
- {
- return true;
- }
-
- public function description(): string
- {
- return $this->reason->description() . " in char " . $this->token;
- }
-
- public function code(): int
- {
- return $this->reason->code();
- }
-
- public function reason(): Reason
- {
- return $this->reason;
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Result/MultipleErrors.php b/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Result/MultipleErrors.php
deleted file mode 100644
index 5fa85afc9..000000000
--- a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Result/MultipleErrors.php
+++ /dev/null
@@ -1,56 +0,0 @@
-reasons[$reason->code()] = $reason;
- }
-
- /**
- * @return Reason[]
- */
- public function getReasons() : array
- {
- return $this->reasons;
- }
-
- public function reason() : Reason
- {
- return 0 !== count($this->reasons)
- ? current($this->reasons)
- : new EmptyReason();
- }
-
- public function description() : string
- {
- $description = '';
- foreach($this->reasons as $reason) {
- $description .= $reason->description() . PHP_EOL;
- }
-
- return $description;
- }
-
- public function code() : int
- {
- return 0;
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Result/Reason/AtextAfterCFWS.php b/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Result/Reason/AtextAfterCFWS.php
deleted file mode 100644
index 96e22842f..000000000
--- a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Result/Reason/AtextAfterCFWS.php
+++ /dev/null
@@ -1,16 +0,0 @@
-detailedDescription = $details;
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Result/Reason/DomainAcceptsNoMail.php b/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Result/Reason/DomainAcceptsNoMail.php
deleted file mode 100644
index bcaefb68a..000000000
--- a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Result/Reason/DomainAcceptsNoMail.php
+++ /dev/null
@@ -1,16 +0,0 @@
-exception = $exception;
-
- }
- public function code() : int
- {
- return 999;
- }
-
- public function description() : string
- {
- return $this->exception->getMessage();
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Result/Reason/ExpectingATEXT.php b/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Result/Reason/ExpectingATEXT.php
deleted file mode 100644
index 07ea8d238..000000000
--- a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Result/Reason/ExpectingATEXT.php
+++ /dev/null
@@ -1,16 +0,0 @@
-detailedDescription;
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Result/Reason/ExpectingCTEXT.php b/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Result/Reason/ExpectingCTEXT.php
deleted file mode 100644
index 64f5f7c3e..000000000
--- a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Result/Reason/ExpectingCTEXT.php
+++ /dev/null
@@ -1,16 +0,0 @@
-element = $element;
- }
-
- public function code() : int
- {
- return 201;
- }
-
- public function description() : string
- {
- return 'Unusual element found, wourld render invalid in majority of cases. Element found: ' . $this->element;
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Result/Result.php b/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Result/Result.php
deleted file mode 100644
index fd13e6c68..000000000
--- a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Result/Result.php
+++ /dev/null
@@ -1,27 +0,0 @@
-reason = new ReasonSpoofEmail();
- parent::__construct($this->reason, '');
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Result/ValidEmail.php b/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Result/ValidEmail.php
deleted file mode 100644
index fdc882fac..000000000
--- a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Result/ValidEmail.php
+++ /dev/null
@@ -1,27 +0,0 @@
-dnsGetRecord = $dnsGetRecord;
- }
-
- public function isValid(string $email, EmailLexer $emailLexer): bool
- {
- // use the input to check DNS if we cannot extract something similar to a domain
- $host = $email;
-
- // Arguable pattern to extract the domain. Not aiming to validate the domain nor the email
- if (false !== $lastAtPos = strrpos($email, '@')) {
- $host = substr($email, $lastAtPos + 1);
- }
-
- // Get the domain parts
- $hostParts = explode('.', $host);
-
- $isLocalDomain = count($hostParts) <= 1;
- $isReservedTopLevel = in_array($hostParts[(count($hostParts) - 1)], self::RESERVED_DNS_TOP_LEVEL_NAMES, true);
-
- // Exclude reserved top level DNS names
- if ($isLocalDomain || $isReservedTopLevel) {
- $this->error = new InvalidEmail(new LocalOrReservedDomain(), $host);
- return false;
- }
-
- return $this->checkDns($host);
- }
-
- public function getError(): ?InvalidEmail
- {
- return $this->error;
- }
-
- /**
- * @return Warning[]
- */
- public function getWarnings(): array
- {
- return $this->warnings;
- }
-
- /**
- * @param string $host
- *
- * @return bool
- */
- protected function checkDns($host)
- {
- $variant = INTL_IDNA_VARIANT_UTS46;
-
- $host = rtrim(idn_to_ascii($host, IDNA_DEFAULT, $variant), '.');
-
- $hostParts = explode('.', $host);
- $host = array_pop($hostParts);
-
- while (count($hostParts) > 0) {
- $host = array_pop($hostParts) . '.' . $host;
-
- if ($this->validateDnsRecords($host)) {
- return true;
- }
- }
-
- return false;
- }
-
-
- /**
- * Validate the DNS records for given host.
- *
- * @param string $host A set of DNS records in the format returned by dns_get_record.
- *
- * @return bool True on success.
- */
- private function validateDnsRecords($host): bool
- {
- $dnsRecordsResult = $this->dnsGetRecord->getRecords($host, DNS_A + DNS_MX);
-
- if ($dnsRecordsResult->withError()) {
- $this->error = new InvalidEmail(new UnableToGetDNSRecord(), '');
- return false;
- }
-
- $dnsRecords = $dnsRecordsResult->getRecords();
-
- // Combined check for A+MX+AAAA can fail with SERVFAIL, even in the presence of valid A/MX records
- $aaaaRecordsResult = $this->dnsGetRecord->getRecords($host, DNS_AAAA);
-
- if (! $aaaaRecordsResult->withError()) {
- $dnsRecords = array_merge($dnsRecords, $aaaaRecordsResult->getRecords());
- }
-
- // No MX, A or AAAA DNS records
- if ($dnsRecords === []) {
- $this->error = new InvalidEmail(new ReasonNoDNSRecord(), '');
- return false;
- }
-
- // For each DNS record
- foreach ($dnsRecords as $dnsRecord) {
- if (!$this->validateMXRecord($dnsRecord)) {
- // No MX records (fallback to A or AAAA records)
- if (empty($this->mxRecords)) {
- $this->warnings[NoDNSMXRecord::CODE] = new NoDNSMXRecord();
- }
- return false;
- }
- }
- return true;
- }
-
- /**
- * Validate an MX record
- *
- * @param array $dnsRecord Given DNS record.
- *
- * @return bool True if valid.
- */
- private function validateMxRecord($dnsRecord): bool
- {
- if (!isset($dnsRecord['type'])) {
- $this->error = new InvalidEmail(new ReasonNoDNSRecord(), '');
- return false;
- }
-
- if ($dnsRecord['type'] !== 'MX') {
- return true;
- }
-
- // "Null MX" record indicates the domain accepts no mail (https://tools.ietf.org/html/rfc7505)
- if (empty($dnsRecord['target']) || $dnsRecord['target'] === '.') {
- $this->error = new InvalidEmail(new DomainAcceptsNoMail(), "");
- return false;
- }
-
- $this->mxRecords[] = $dnsRecord;
-
- return true;
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Validation/EmailValidation.php b/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Validation/EmailValidation.php
deleted file mode 100644
index 1bcc0a70b..000000000
--- a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Validation/EmailValidation.php
+++ /dev/null
@@ -1,34 +0,0 @@
-setChecks(Spoofchecker::SINGLE_SCRIPT);
-
- if ($checker->isSuspicious($email)) {
- $this->error = new SpoofEmail();
- }
-
- return $this->error === null;
- }
-
- public function getError() : ?InvalidEmail
- {
- return $this->error;
- }
-
- public function getWarnings() : array
- {
- return [];
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Validation/MessageIDValidation.php b/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Validation/MessageIDValidation.php
deleted file mode 100644
index 97d1ea7a7..000000000
--- a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Validation/MessageIDValidation.php
+++ /dev/null
@@ -1,55 +0,0 @@
-parse($email);
- $this->warnings = $parser->getWarnings();
- if ($result->isInvalid()) {
- /** @psalm-suppress PropertyTypeCoercion */
- $this->error = $result;
- return false;
- }
- } catch (\Exception $invalid) {
- $this->error = new InvalidEmail(new ExceptionFound($invalid), '');
- return false;
- }
-
- return true;
- }
-
- /**
- * @return Warning[]
- */
- public function getWarnings(): array
- {
- return $this->warnings;
- }
-
- public function getError(): ?InvalidEmail
- {
- return $this->error;
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Validation/MultipleValidationWithAnd.php b/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Validation/MultipleValidationWithAnd.php
deleted file mode 100644
index c908053f3..000000000
--- a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Validation/MultipleValidationWithAnd.php
+++ /dev/null
@@ -1,105 +0,0 @@
-validations as $validation) {
- $emailLexer->reset();
- $validationResult = $validation->isValid($email, $emailLexer);
- $result = $result && $validationResult;
- $this->warnings = [...$this->warnings, ...$validation->getWarnings()];
- if (!$validationResult) {
- $this->processError($validation);
- }
-
- if ($this->shouldStop($result)) {
- break;
- }
- }
-
- return $result;
- }
-
- private function initErrorStorage(): void
- {
- if (null === $this->error) {
- $this->error = new MultipleErrors();
- }
- }
-
- private function processError(EmailValidation $validation): void
- {
- if (null !== $validation->getError()) {
- $this->initErrorStorage();
- /** @psalm-suppress PossiblyNullReference */
- $this->error->addReason($validation->getError()->reason());
- }
- }
-
- private function shouldStop(bool $result): bool
- {
- return !$result && $this->mode === self::STOP_ON_ERROR;
- }
-
- /**
- * Returns the validation errors.
- */
- public function getError(): ?InvalidEmail
- {
- return $this->error;
- }
-
- /**
- * @return Warning[]
- */
- public function getWarnings(): array
- {
- return $this->warnings;
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Validation/NoRFCWarningsValidation.php b/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Validation/NoRFCWarningsValidation.php
deleted file mode 100644
index 06885ed71..000000000
--- a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Validation/NoRFCWarningsValidation.php
+++ /dev/null
@@ -1,41 +0,0 @@
-getWarnings())) {
- return true;
- }
-
- $this->error = new InvalidEmail(new RFCWarnings(), '');
-
- return false;
- }
-
- /**
- * {@inheritdoc}
- */
- public function getError() : ?InvalidEmail
- {
- return $this->error ?: parent::getError();
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Validation/RFCValidation.php b/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Validation/RFCValidation.php
deleted file mode 100644
index f59cbfc80..000000000
--- a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Validation/RFCValidation.php
+++ /dev/null
@@ -1,54 +0,0 @@
-parse($email);
- $this->warnings = $parser->getWarnings();
- if ($result->isInvalid()) {
- /** @psalm-suppress PropertyTypeCoercion */
- $this->error = $result;
- return false;
- }
- } catch (\Exception $invalid) {
- $this->error = new InvalidEmail(new ExceptionFound($invalid), '');
- return false;
- }
-
- return true;
- }
-
- public function getError(): ?InvalidEmail
- {
- return $this->error;
- }
-
- /**
- * @return Warning[]
- */
- public function getWarnings(): array
- {
- return $this->warnings;
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Warning/AddressLiteral.php b/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Warning/AddressLiteral.php
deleted file mode 100644
index 474ff0e75..000000000
--- a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Warning/AddressLiteral.php
+++ /dev/null
@@ -1,14 +0,0 @@
-message = 'Address literal in domain part';
- $this->rfcNumber = 5321;
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Warning/CFWSNearAt.php b/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Warning/CFWSNearAt.php
deleted file mode 100644
index 8bac12b1e..000000000
--- a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Warning/CFWSNearAt.php
+++ /dev/null
@@ -1,13 +0,0 @@
-message = "Deprecated folding white space near @";
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Warning/CFWSWithFWS.php b/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Warning/CFWSWithFWS.php
deleted file mode 100644
index ba57601c8..000000000
--- a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Warning/CFWSWithFWS.php
+++ /dev/null
@@ -1,13 +0,0 @@
-message = 'Folding whites space followed by folding white space';
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Warning/Comment.php b/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Warning/Comment.php
deleted file mode 100644
index 6508295e3..000000000
--- a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Warning/Comment.php
+++ /dev/null
@@ -1,13 +0,0 @@
-message = "Comments found in this email";
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Warning/DeprecatedComment.php b/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Warning/DeprecatedComment.php
deleted file mode 100644
index a2578076e..000000000
--- a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Warning/DeprecatedComment.php
+++ /dev/null
@@ -1,13 +0,0 @@
-message = 'Deprecated comments';
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Warning/DomainLiteral.php b/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Warning/DomainLiteral.php
deleted file mode 100644
index 034388c47..000000000
--- a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Warning/DomainLiteral.php
+++ /dev/null
@@ -1,14 +0,0 @@
-message = 'Domain Literal';
- $this->rfcNumber = 5322;
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Warning/EmailTooLong.php b/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Warning/EmailTooLong.php
deleted file mode 100644
index d25ad1234..000000000
--- a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Warning/EmailTooLong.php
+++ /dev/null
@@ -1,15 +0,0 @@
-message = 'Email is too long, exceeds ' . EmailParser::EMAIL_MAX_LENGTH;
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Warning/IPV6BadChar.php b/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Warning/IPV6BadChar.php
deleted file mode 100644
index 3ecd5bcca..000000000
--- a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Warning/IPV6BadChar.php
+++ /dev/null
@@ -1,14 +0,0 @@
-message = 'Bad char in IPV6 domain literal';
- $this->rfcNumber = 5322;
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Warning/IPV6ColonEnd.php b/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Warning/IPV6ColonEnd.php
deleted file mode 100644
index 3f0c2f2df..000000000
--- a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Warning/IPV6ColonEnd.php
+++ /dev/null
@@ -1,14 +0,0 @@
-message = ':: found at the end of the domain literal';
- $this->rfcNumber = 5322;
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Warning/IPV6ColonStart.php b/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Warning/IPV6ColonStart.php
deleted file mode 100644
index 742fb3bd1..000000000
--- a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Warning/IPV6ColonStart.php
+++ /dev/null
@@ -1,14 +0,0 @@
-message = ':: found at the start of the domain literal';
- $this->rfcNumber = 5322;
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Warning/IPV6Deprecated.php b/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Warning/IPV6Deprecated.php
deleted file mode 100644
index 59c3037a5..000000000
--- a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Warning/IPV6Deprecated.php
+++ /dev/null
@@ -1,14 +0,0 @@
-message = 'Deprecated form of IPV6';
- $this->rfcNumber = 5321;
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Warning/IPV6DoubleColon.php b/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Warning/IPV6DoubleColon.php
deleted file mode 100644
index d40660264..000000000
--- a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Warning/IPV6DoubleColon.php
+++ /dev/null
@@ -1,14 +0,0 @@
-message = 'Double colon found after IPV6 tag';
- $this->rfcNumber = 5322;
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Warning/IPV6GroupCount.php b/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Warning/IPV6GroupCount.php
deleted file mode 100644
index 551bc3af1..000000000
--- a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Warning/IPV6GroupCount.php
+++ /dev/null
@@ -1,14 +0,0 @@
-message = 'Group count is not IPV6 valid';
- $this->rfcNumber = 5322;
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Warning/IPV6MaxGroups.php b/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Warning/IPV6MaxGroups.php
deleted file mode 100644
index 7f8a410a8..000000000
--- a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Warning/IPV6MaxGroups.php
+++ /dev/null
@@ -1,14 +0,0 @@
-message = 'Reached the maximum number of IPV6 groups allowed';
- $this->rfcNumber = 5321;
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Warning/LocalTooLong.php b/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Warning/LocalTooLong.php
deleted file mode 100644
index b46b874c0..000000000
--- a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Warning/LocalTooLong.php
+++ /dev/null
@@ -1,15 +0,0 @@
-message = 'Local part is too long, exceeds 64 chars (octets)';
- $this->rfcNumber = 5322;
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Warning/NoDNSMXRecord.php b/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Warning/NoDNSMXRecord.php
deleted file mode 100644
index bddb96be7..000000000
--- a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Warning/NoDNSMXRecord.php
+++ /dev/null
@@ -1,14 +0,0 @@
-message = 'No MX DSN record was found for this email';
- $this->rfcNumber = 5321;
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Warning/ObsoleteDTEXT.php b/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Warning/ObsoleteDTEXT.php
deleted file mode 100644
index 412fd499e..000000000
--- a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Warning/ObsoleteDTEXT.php
+++ /dev/null
@@ -1,14 +0,0 @@
-rfcNumber = 5322;
- $this->message = 'Obsolete DTEXT in domain literal';
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Warning/QuotedPart.php b/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Warning/QuotedPart.php
deleted file mode 100644
index c3e017d94..000000000
--- a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Warning/QuotedPart.php
+++ /dev/null
@@ -1,17 +0,0 @@
-message = "Deprecated Quoted String found between $prevToken and $postToken";
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Warning/QuotedString.php b/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Warning/QuotedString.php
deleted file mode 100644
index c152ec2e2..000000000
--- a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Warning/QuotedString.php
+++ /dev/null
@@ -1,17 +0,0 @@
-message = "Quoted String found between $prevToken and $postToken";
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Warning/TLD.php b/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Warning/TLD.php
deleted file mode 100644
index 10cec2816..000000000
--- a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Warning/TLD.php
+++ /dev/null
@@ -1,13 +0,0 @@
-message = "RFC5321, TLD";
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Warning/Warning.php b/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Warning/Warning.php
deleted file mode 100644
index 7adb3b85c..000000000
--- a/fixtures/symfony_5_local_deps/vendor/egulias/email-validator/src/Warning/Warning.php
+++ /dev/null
@@ -1,53 +0,0 @@
-message;
- }
-
- /**
- * @return int
- */
- public function code()
- {
- return self::CODE;
- }
-
- /**
- * @return int
- */
- public function RFCNumber()
- {
- return $this->rfcNumber;
- }
-
- /**
- * @return string
- */
- public function __toString(): string
- {
- return $this->message() . " rfc: " . $this->rfcNumber . "internal code: " . static::CODE;
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/masterminds/html5/CREDITS b/fixtures/symfony_5_local_deps/vendor/masterminds/html5/CREDITS
deleted file mode 100644
index c2dbc4b64..000000000
--- a/fixtures/symfony_5_local_deps/vendor/masterminds/html5/CREDITS
+++ /dev/null
@@ -1,11 +0,0 @@
-Matt Butcher [technosophos] (lead)
-Matt Farina [mattfarina] (lead)
-Asmir Mustafic [goetas] (contributor)
-Edward Z. Yang [ezyang] (contributor)
-Geoffrey Sneddon [gsnedders] (contributor)
-Kukhar Vasily [ngreduce] (contributor)
-Rune Christensen [MrElectronic] (contributor)
-Mišo Belica [miso-belica] (contributor)
-Asmir Mustafic [goetas] (contributor)
-KITAITI Makoto [KitaitiMakoto] (contributor)
-Jacob Floyd [cognifloyd] (contributor)
diff --git a/fixtures/symfony_5_local_deps/vendor/masterminds/html5/LICENSE.txt b/fixtures/symfony_5_local_deps/vendor/masterminds/html5/LICENSE.txt
deleted file mode 100644
index 3c275b54a..000000000
--- a/fixtures/symfony_5_local_deps/vendor/masterminds/html5/LICENSE.txt
+++ /dev/null
@@ -1,66 +0,0 @@
-## HTML5-PHP License
-
-Copyright (c) 2013 The Authors of HTML5-PHP
-
-Matt Butcher - mattbutcher@google.com
-Matt Farina - matt@mattfarina.com
-Asmir Mustafic - goetas@gmail.com
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
-IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-## HTML5Lib License
-
-Portions of this are based on html5lib's PHP version, which was a
-sub-project of html5lib. The following is the list of contributors from
-html5lib:
-
-html5lib:
-
-Copyright (c) 2006-2009 The Authors
-
-Contributors:
-James Graham - jg307@cam.ac.uk
-Anne van Kesteren - annevankesteren@gmail.com
-Lachlan Hunt - lachlan.hunt@lachy.id.au
-Matt McDonald - kanashii@kanashii.ca
-Sam Ruby - rubys@intertwingly.net
-Ian Hickson (Google) - ian@hixie.ch
-Thomas Broyer - t.broyer@ltgt.net
-Jacques Distler - distler@golem.ph.utexas.edu
-Henri Sivonen - hsivonen@iki.fi
-Adam Barth - abarth@webkit.org
-Eric Seidel - eric@webkit.org
-The Mozilla Foundation (contributions from Henri Sivonen since 2008)
-David Flanagan (Mozilla) - dflanagan@mozilla.com
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
-IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/fixtures/symfony_5_local_deps/vendor/masterminds/html5/README.md b/fixtures/symfony_5_local_deps/vendor/masterminds/html5/README.md
deleted file mode 100644
index e80dec507..000000000
--- a/fixtures/symfony_5_local_deps/vendor/masterminds/html5/README.md
+++ /dev/null
@@ -1,270 +0,0 @@
-> # UKRAINE NEEDS YOUR HELP NOW!
->
-> On 24 February 2022, Russian [President Vladimir Putin ordered an invasion of Ukraine by Russian Armed Forces](https://www.bbc.com/news/world-europe-60504334).
->
-> Your support is urgently needed.
->
-> - Donate to the volunteers. Here is the volunteer fund helping the Ukrainian army to provide all the necessary equipment:
-> https://bank.gov.ua/en/news/all/natsionalniy-bank-vidkriv-spetsrahunok-dlya-zboru-koshtiv-na-potrebi-armiyi or https://savelife.in.ua/en/donate/
-> - Triple-check social media sources. Russian disinformation is attempting to coverup and distort the reality in Ukraine.
-> - Help Ukrainian refugees who are fleeing Russian attacks and shellings: https://www.globalcitizen.org/en/content/ways-to-help-ukraine-conflict/
-> - Put pressure on your political representatives to provide help to Ukraine.
-> - Believe in the Ukrainian people, they will not surrender, they don't have another Ukraine.
->
-> THANK YOU!
-----
-
-# HTML5-PHP
-
-HTML5 is a standards-compliant HTML5 parser and writer written entirely in PHP.
-It is stable and used in many production websites, and has
-well over [five million downloads](https://packagist.org/packages/masterminds/html5).
-
-HTML5 provides the following features.
-
-- An HTML5 serializer
-- Support for PHP namespaces
-- Composer support
-- Event-based (SAX-like) parser
-- A DOM tree builder
-- Interoperability with [QueryPath](https://github.com/technosophos/querypath)
-- Runs on **PHP** 5.3.0 or newer
-
-[](https://travis-ci.org/Masterminds/html5-php)
-[](https://packagist.org/packages/masterminds/html5)
-[](https://scrutinizer-ci.com/g/Masterminds/html5-php/?branch=master)
-[](https://scrutinizer-ci.com/g/Masterminds/html5-php/?branch=master)
-[](https://masterminds.github.io/stability/sustained.html)
-
-## Installation
-
-Install HTML5-PHP using [composer](http://getcomposer.org/).
-
-By adding the `masterminds/html5` dependency to your `composer.json` file:
-
-```json
-{
- "require" : {
- "masterminds/html5": "^2.0"
- },
-}
-```
-
-By invoking require command via composer executable:
-
-```bash
-composer require masterminds/html5
-```
-
-## Basic Usage
-
-HTML5-PHP has a high-level API and a low-level API.
-
-Here is how you use the high-level `HTML5` library API:
-
-```php
-
-
- TEST
-
-
- Hello World
- This is a test of the HTML5 parser.
-
-
-HERE;
-
-// Parse the document. $dom is a DOMDocument.
-$html5 = new HTML5();
-$dom = $html5->loadHTML($html);
-
-// Render it as HTML5:
-print $html5->saveHTML($dom);
-
-// Or save it to a file:
-$html5->save($dom, 'out.html');
-```
-
-The `$dom` created by the parser is a full `DOMDocument` object. And the
-`save()` and `saveHTML()` methods will take any DOMDocument.
-
-### Options
-
-It is possible to pass in an array of configuration options when loading
-an HTML5 document.
-
-```php
-// An associative array of options
-$options = array(
- 'option_name' => 'option_value',
-);
-
-// Provide the options to the constructor
-$html5 = new HTML5($options);
-
-$dom = $html5->loadHTML($html);
-```
-
-The following options are supported:
-
-* `encode_entities` (boolean): Indicates that the serializer should aggressively
- encode characters as entities. Without this, it only encodes the bare
- minimum.
-* `disable_html_ns` (boolean): Prevents the parser from automatically
- assigning the HTML5 namespace to the DOM document. This is for
- non-namespace aware DOM tools.
-* `target_document` (\DOMDocument): A DOM document that will be used as the
- destination for the parsed nodes.
-* `implicit_namespaces` (array): An assoc array of namespaces that should be
- used by the parser. Name is tag prefix, value is NS URI.
-
-## The Low-Level API
-
-This library provides the following low-level APIs that you can use to
-create more customized HTML5 tools:
-
-- A SAX-like event-based parser that you can hook into for special kinds
-of parsing.
-- A flexible error-reporting mechanism that can be tuned to document
-syntax checking.
-- A DOM implementation that uses PHP's built-in DOM library.
-
-The unit tests exercise each piece of the API, and every public function
-is well-documented.
-
-### Parser Design
-
-The parser is designed as follows:
-
-- The `Scanner` handles scanning on behalf of the parser.
-- The `Tokenizer` requests data off of the scanner, parses it, clasifies
-it, and sends it to an `EventHandler`. It is a *recursive descent parser.*
-- The `EventHandler` receives notifications and data for each specific
-semantic event that occurs during tokenization.
-- The `DOMBuilder` is an `EventHandler` that listens for tokenizing
-events and builds a document tree (`DOMDocument`) based on the events.
-
-### Serializer Design
-
-The serializer takes a data structure (the `DOMDocument`) and transforms
-it into a character representation -- an HTML5 document.
-
-The serializer is broken into three parts:
-
-- The `OutputRules` contain the rules to turn DOM elements into strings. The
-rules are an implementation of the interface `RulesInterface` allowing for
-different rule sets to be used.
-- The `Traverser`, which is a special-purpose tree walker. It visits
-each node node in the tree and uses the `OutputRules` to transform the node
-into a string.
-- `HTML5` manages the `Traverser` and stores the resultant data
-in the correct place.
-
-The serializer (`save()`, `saveHTML()`) follows the
-[section 8.9 of the HTML 5.0 spec](http://www.w3.org/TR/2012/CR-html5-20121217/syntax.html#serializing-html-fragments).
-So tags are serialized according to these rules:
-
-- A tag with children: <foo>CHILDREN</foo>
-- A tag that cannot have content: <foo> (no closing tag)
-- A tag that could have content, but doesn't: <foo></foo>
-
-## Known Issues (Or, Things We Designed Against the Spec)
-
-Please check the issue queue for a full list, but the following are
-issues known issues that are not presently on the roadmap:
-
-- Namespaces: HTML5 only [supports a selected list of namespaces](http://www.w3.org/TR/html5/infrastructure.html#namespaces)
- and they do not operate in the same way as XML namespaces. A `:` has no special
- meaning.
- By default the parser does not support XML style namespaces via `:`;
- to enable the XML namespaces see the [XML Namespaces section](#xml-namespaces)
-- Scripts: This parser does not contain a JavaScript or a CSS
- interpreter. While one may be supplied, not all features will be
- supported.
-- Reentrance: The current parser is not re-entrant. (Thus you can't pause
- the parser to modify the HTML string mid-parse.)
-- Validation: The current tree builder is **not** a validating parser.
- While it will correct some HTML, it does not check that the HTML
- conforms to the standard. (Should you wish, you can build a validating
- parser by extending DOMTree or building your own EventHandler
- implementation.)
- * There is limited support for insertion modes.
- * Some autocorrection is done automatically.
- * Per the spec, many legacy tags are admitted and correctly handled,
- even though they are technically not part of HTML5.
-- Attribute names and values: Due to the implementation details of the
- PHP implementation of DOM, attribute names that do not follow the
- XML 1.0 standard are not inserted into the DOM. (Effectively, they
- are ignored.) If you've got a clever fix for this, jump in!
-- Processor Instructions: The HTML5 spec does not allow processor
- instructions. We do. Since this is a server-side library, we think
- this is useful. And that means, dear reader, that in some cases you
- can parse the HTML from a mixed PHP/HTML document. This, however,
- is an incidental feature, not a core feature.
-- HTML manifests: Unsupported.
-- PLAINTEXT: Unsupported.
-- Adoption Agency Algorithm: Not yet implemented. (8.2.5.4.7)
-
-## XML Namespaces
-
-To use XML style namespaces you have to configure well the main `HTML5` instance.
-
-```php
-use Masterminds\HTML5;
-$html = new HTML5(array(
- "xmlNamespaces" => true
-));
-
-$dom = $html->loadHTML(' ');
-
-$dom->documentElement->namespaceURI; // http://www.example.com
-
-```
-
-You can also add some default prefixes that will not require the namespace declaration,
-but its elements will be namespaced.
-
-```php
-use Masterminds\HTML5;
-$html = new HTML5(array(
- "implicitNamespaces"=>array(
- "t"=>"http://www.example.com"
- )
-));
-
-$dom = $html->loadHTML(' ');
-
-$dom->documentElement->namespaceURI; // http://www.example.com
-
-```
-
-## Thanks to...
-
-The dedicated (and patient) contributors of patches small and large,
-who have already made this library better.See the CREDITS file for
-a list of contributors.
-
-We owe a huge debt of gratitude to the original authors of html5lib.
-
-While not much of the original parser remains, we learned a lot from
-reading the html5lib library. And some pieces remain here. In
-particular, much of the UTF-8 and Unicode handling is derived from the
-html5lib project.
-
-## License
-
-This software is released under the MIT license. The original html5lib
-library was also released under the MIT license.
-
-See LICENSE.txt
-
-Certain files contain copyright assertions by specific individuals
-involved with html5lib. Those have been retained where appropriate.
diff --git a/fixtures/symfony_5_local_deps/vendor/masterminds/html5/RELEASE.md b/fixtures/symfony_5_local_deps/vendor/masterminds/html5/RELEASE.md
deleted file mode 100644
index 33007ed69..000000000
--- a/fixtures/symfony_5_local_deps/vendor/masterminds/html5/RELEASE.md
+++ /dev/null
@@ -1,157 +0,0 @@
-# Release Notes
-
-2.7.6 (2021-08-18)
-
-- #218: Address comment handling issues
-
-2.7.5 (2021-07-01)
-
-- #204: Travis: Enable tests on PHP 8.0
-- #207: Fix PHP 8.1 deprecations
-
-2.7.4 (2020-10-01)
-
-- #191: Fix travisci build
-- #195: Add .gitattributes file with export-ignore rules
-- #194: Fix query parameter parsed as character entity
-
-2.7.3 (2020-07-05)
-
-- #190: mitigate cyclic reference between output rules and the traverser objects
-
-2.7.2 (2020-07-01)
-
-- #187: Fixed memory leak in HTML5::saveHTML()
-- #186: Add special case for end tag
-
-2.7.1 (2020-06-14)
-
-- #171: add PHP 7.4 job
-- #178: Prevent infinite loop on un-terminated entity declaration at EOF
-
-2.7.0 (2019-07-25)
-
-- #164: Drop HHVM support
-- #168: Set default encoding in the DOMDocument object
-
-2.6.0 (2019-03-10)
-
-- #163: Allow to pass a charset to the Scanner
-
-2.5.0 (2018-12-27)
-
-- #162, #161, #155, #154, #153, #151: big performance improvements
-- #156: fixed typos
-- #160: adopt and enforce code style
-- #159: remove deprecated php unit base test case
-- #150: backport changes from old master branch
-
-2.4.0 (2018-11-17)
-
-- #148: Improve performance by moving sequence matching
-- #147: Improve the Tokenizer performance
-- #146: Improve performance by relying on a native string instead of InputStream
-- #144: Add DOM extension in composer.json
-- #145: Add more extensions on composer.json, improve phpdocs and remove dead code
-- #143: Remove experimental comment
-
-2.3.1 (2018-10-18)
-
-- #121: Audio is not a block tag (fixed by #141)
-- #136: Handle illegal self-closing according to spec (fixed by #137)
-- #141: Minor fixes in the README
-
-2.3.0 (2017-09-04)
-
-- #129: image within inline svg breaks system (fixed by #133)
-- #131: ² does not work (fixed by #132)
-- #134: Improve tokenizer performance by 20% (alternative version of #130 thanks to @MichaelHeerklotz)
-- #135: Raw & in attributes
-
-2.2.2 (2016-09-22)
-
-- #116: In XML mode, tags are case sensitive
-- #115: Fix PHP Notice in OutputRules
-- #112: fix parsing of options of an optgroup
-- #111: Adding test for the address tag
-
-2.2.1 (2016-05-10)
-
-- #109: Fixed issue where address tag could be written without closing tag (thanks sylus)
-
-2.2.0 (2016-04-11)
-
-- #105: Enable composer cache (for CI/CD)
-- #100: Use mb_substitute_character inset of ini_set for environments where ini_set is disable (e.g., shared hosting)
-- #98: Allow link, meta, style tags in noscript tags
-- #96: Fixed xml:href on svgs that use the "use" breaking
-- #94: Counting UTF8 characters performance improvement
-- #93: Use newer version of coveralls package
-- #90: Remove duplicate test
-- #87: Allow multiple root nodes
-
-2.1.2 (2015-06-07)
-- #82: Support for PHP7
-- #84: Improved boolean attribute handling
-
-2.1.1 (2015-03-23)
-- #78: Fixes bug where unmatched entity like string drops everything after &.
-
-2.1.0 (2015-02-01)
-- #74: Added `disable_html_ns` and `target_doc` dom parsing options
-- Unified option names
-- #73: Fixed alphabet, ß now can be detected
-- #75 and #76: Allow whitespace in RCDATA tags
-- #77: Fixed parsing blunder for json embeds
-- #72: Add options to HTML methods
-
-2.0.2 (2014-12-17)
-- #50: empty document handling
-- #63: tags with strange capitalization
-- #65: dashes and underscores as allowed characters in tag names
-- #68: Fixed issue with non-inline elements inside inline containers
-
-2.0.1 (2014-09-23)
-- #59: Fixed issue parsing some fragments.
-- #56: Incorrectly saw 0 as empty string
-- Sami as new documentation generator
-
-2.0.0 (2014-07-28)
-- #53: Improved boolean attributes handling
-- #52: Facebook HHVM compatibility
-- #48: Adopted PSR-2 as coding standard
-- #47: Moved everything to Masterminds namespace
-- #45: Added custom namespaces
-- #44: Added support to XML-style namespaces
-- #37: Refactored HTML5 class removing static methods
-
-1.0.5 (2014-06-10)
-- #38: Set the dev-master branch as the 1.0.x branch for composer (goetas)
-- #34: Tests use PSR-4 for autoloading. (goetas)
-- #40, #41: Fix entity handling in RCDATA sections. (KitaitiMakoto)
-- #32: Fixed issue where wharacter references were being incorrectly encoded in style tags.
-
-1.0.4 (2014-04-29)
-- #30/#31 Don't throw an exception for invalid tag names.
-
-1.0.3 (2014-02-28)
-- #23 and #29: Ignore attributes with illegal chars in name for the PHP DOM.
-
-1.0.2 (2014-02-12)
-- #23: Handle missing tag close in attribute list.
-- #25: Fixed text escaping in the serializer (HTML% 8.3).
-- #27: Fixed tests on Windows: changed "\n" -> PHP_EOL.
-- #28: Fixed infinite loop for char "&" in unquoted attribute in parser.
-- #26: Updated tag name case handling to deal with uppercase usage.
-- #24: Newlines and tabs are allowed inside quoted attributes (HTML5 8.2.4).
-- Fixed Travis CI testing.
-
-1.0.1 (2013-11-07)
-- CDATA encoding is improved. (Non-standard; Issue #19)
-- Some parser rules were not returning the new current element. (Issue #20)
-- Added, to the README, details on code test coverage and to packagist version.
-- Fixed processor instructions.
-- Improved test coverage and documentation coverage.
-
-1.0.0 (2013-10-02)
-- Initial release.
diff --git a/fixtures/symfony_5_local_deps/vendor/masterminds/html5/UPGRADING.md b/fixtures/symfony_5_local_deps/vendor/masterminds/html5/UPGRADING.md
deleted file mode 100644
index 76e3a19bc..000000000
--- a/fixtures/symfony_5_local_deps/vendor/masterminds/html5/UPGRADING.md
+++ /dev/null
@@ -1,21 +0,0 @@
-From 1.x to 2.x
-=================
-
-- All classes uses `Masterminds` namespace.
-- All public static methods has been removed from `HTML5` class and the general API to access the HTML5 functionalities has changed.
-
- Before:
-
- $dom = \HTML5::loadHTML('....');
- \HTML5::saveHTML($dom);
-
- After:
-
- use Masterminds\HTML5;
-
- $html5 = new HTML5();
-
- $dom = $html5->loadHTML('....');
- echo $html5->saveHTML($dom);
-
-
diff --git a/fixtures/symfony_5_local_deps/vendor/masterminds/html5/bin/entities.php b/fixtures/symfony_5_local_deps/vendor/masterminds/html5/bin/entities.php
deleted file mode 100644
index 56323a341..000000000
--- a/fixtures/symfony_5_local_deps/vendor/masterminds/html5/bin/entities.php
+++ /dev/null
@@ -1,26 +0,0 @@
- $obj) {
- $sname = substr($name, 1, -1);
- $table[$sname] = $obj->characters;
-}
-
-echo '=5.3.0"
- },
- "require-dev": {
- "phpunit/phpunit" : "^4.8.35 || ^5.7.21 || ^6 || ^7 || ^8"
- },
- "autoload": {
- "psr-4": {"Masterminds\\": "src"}
- },
- "autoload-dev": {
- "psr-4": {"Masterminds\\HTML5\\Tests\\": "test/HTML5"}
- },
- "extra": {
- "branch-alias": {
- "dev-master": "2.7-dev"
- }
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/masterminds/html5/src/HTML5.php b/fixtures/symfony_5_local_deps/vendor/masterminds/html5/src/HTML5.php
deleted file mode 100644
index c857145fb..000000000
--- a/fixtures/symfony_5_local_deps/vendor/masterminds/html5/src/HTML5.php
+++ /dev/null
@@ -1,246 +0,0 @@
- false,
-
- // Prevents the parser from automatically assigning the HTML5 namespace to the DOM document.
- 'disable_html_ns' => false,
- );
-
- protected $errors = array();
-
- public function __construct(array $defaultOptions = array())
- {
- $this->defaultOptions = array_merge($this->defaultOptions, $defaultOptions);
- }
-
- /**
- * Get the current default options.
- *
- * @return array
- */
- public function getOptions()
- {
- return $this->defaultOptions;
- }
-
- /**
- * Load and parse an HTML file.
- *
- * This will apply the HTML5 parser, which is tolerant of many
- * varieties of HTML, including XHTML 1, HTML 4, and well-formed HTML
- * 3. Note that in these cases, not all of the old data will be
- * preserved. For example, XHTML's XML declaration will be removed.
- *
- * The rules governing parsing are set out in the HTML 5 spec.
- *
- * @param string|resource $file The path to the file to parse. If this is a resource, it is
- * assumed to be an open stream whose pointer is set to the first
- * byte of input.
- * @param array $options Configuration options when parsing the HTML.
- *
- * @return \DOMDocument A DOM document. These object type is defined by the libxml
- * library, and should have been included with your version of PHP.
- */
- public function load($file, array $options = array())
- {
- // Handle the case where file is a resource.
- if (is_resource($file)) {
- return $this->parse(stream_get_contents($file), $options);
- }
-
- return $this->parse(file_get_contents($file), $options);
- }
-
- /**
- * Parse a HTML Document from a string.
- *
- * Take a string of HTML 5 (or earlier) and parse it into a
- * DOMDocument.
- *
- * @param string $string A html5 document as a string.
- * @param array $options Configuration options when parsing the HTML.
- *
- * @return \DOMDocument A DOM document. DOM is part of libxml, which is included with
- * almost all distribtions of PHP.
- */
- public function loadHTML($string, array $options = array())
- {
- return $this->parse($string, $options);
- }
-
- /**
- * Convenience function to load an HTML file.
- *
- * This is here to provide backwards compatibility with the
- * PHP DOM implementation. It simply calls load().
- *
- * @param string $file The path to the file to parse. If this is a resource, it is
- * assumed to be an open stream whose pointer is set to the first
- * byte of input.
- * @param array $options Configuration options when parsing the HTML.
- *
- * @return \DOMDocument A DOM document. These object type is defined by the libxml
- * library, and should have been included with your version of PHP.
- */
- public function loadHTMLFile($file, array $options = array())
- {
- return $this->load($file, $options);
- }
-
- /**
- * Parse a HTML fragment from a string.
- *
- * @param string $string the HTML5 fragment as a string
- * @param array $options Configuration options when parsing the HTML
- *
- * @return \DOMDocumentFragment A DOM fragment. The DOM is part of libxml, which is included with
- * almost all distributions of PHP.
- */
- public function loadHTMLFragment($string, array $options = array())
- {
- return $this->parseFragment($string, $options);
- }
-
- /**
- * Return all errors encountered into parsing phase.
- *
- * @return array
- */
- public function getErrors()
- {
- return $this->errors;
- }
-
- /**
- * Return true it some errors were encountered into parsing phase.
- *
- * @return bool
- */
- public function hasErrors()
- {
- return count($this->errors) > 0;
- }
-
- /**
- * Parse an input string.
- *
- * @param string $input
- * @param array $options
- *
- * @return \DOMDocument
- */
- public function parse($input, array $options = array())
- {
- $this->errors = array();
- $options = array_merge($this->defaultOptions, $options);
- $events = new DOMTreeBuilder(false, $options);
- $scanner = new Scanner($input, !empty($options['encoding']) ? $options['encoding'] : 'UTF-8');
- $parser = new Tokenizer($scanner, $events, !empty($options['xmlNamespaces']) ? Tokenizer::CONFORMANT_XML : Tokenizer::CONFORMANT_HTML);
-
- $parser->parse();
- $this->errors = $events->getErrors();
-
- return $events->document();
- }
-
- /**
- * Parse an input stream where the stream is a fragment.
- *
- * Lower-level loading function. This requires an input stream instead
- * of a string, file, or resource.
- *
- * @param string $input The input data to parse in the form of a string.
- * @param array $options An array of options.
- *
- * @return \DOMDocumentFragment
- */
- public function parseFragment($input, array $options = array())
- {
- $options = array_merge($this->defaultOptions, $options);
- $events = new DOMTreeBuilder(true, $options);
- $scanner = new Scanner($input, !empty($options['encoding']) ? $options['encoding'] : 'UTF-8');
- $parser = new Tokenizer($scanner, $events, !empty($options['xmlNamespaces']) ? Tokenizer::CONFORMANT_XML : Tokenizer::CONFORMANT_HTML);
-
- $parser->parse();
- $this->errors = $events->getErrors();
-
- return $events->fragment();
- }
-
- /**
- * Save a DOM into a given file as HTML5.
- *
- * @param mixed $dom The DOM to be serialized.
- * @param string|resource $file The filename to be written or resource to write to.
- * @param array $options Configuration options when serializing the DOM. These include:
- * - encode_entities: Text written to the output is escaped by default and not all
- * entities are encoded. If this is set to true all entities will be encoded.
- * Defaults to false.
- */
- public function save($dom, $file, $options = array())
- {
- $close = true;
- if (is_resource($file)) {
- $stream = $file;
- $close = false;
- } else {
- $stream = fopen($file, 'wb');
- }
- $options = array_merge($this->defaultOptions, $options);
- $rules = new OutputRules($stream, $options);
- $trav = new Traverser($dom, $stream, $rules, $options);
-
- $trav->walk();
- /*
- * release the traverser to avoid cyclic references and allow PHP to free memory without waiting for gc_collect_cycles
- */
- $rules->unsetTraverser();
- if ($close) {
- fclose($stream);
- }
- }
-
- /**
- * Convert a DOM into an HTML5 string.
- *
- * @param mixed $dom The DOM to be serialized.
- * @param array $options Configuration options when serializing the DOM. These include:
- * - encode_entities: Text written to the output is escaped by default and not all
- * entities are encoded. If this is set to true all entities will be encoded.
- * Defaults to false.
- *
- * @return string A HTML5 documented generated from the DOM.
- */
- public function saveHTML($dom, $options = array())
- {
- $stream = fopen('php://temp', 'wb');
- $this->save($dom, $stream, array_merge($this->defaultOptions, $options));
-
- $html = stream_get_contents($stream, -1, 0);
-
- fclose($stream);
-
- return $html;
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/masterminds/html5/src/HTML5/Elements.php b/fixtures/symfony_5_local_deps/vendor/masterminds/html5/src/HTML5/Elements.php
deleted file mode 100644
index 1632dcfec..000000000
--- a/fixtures/symfony_5_local_deps/vendor/masterminds/html5/src/HTML5/Elements.php
+++ /dev/null
@@ -1,619 +0,0 @@
- 1,
- 'abbr' => 1,
- 'address' => 65, // NORMAL | BLOCK_TAG
- 'area' => 9, // NORMAL | VOID_TAG
- 'article' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG
- 'aside' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG
- 'audio' => 1, // NORMAL
- 'b' => 1,
- 'base' => 9, // NORMAL | VOID_TAG
- 'bdi' => 1,
- 'bdo' => 1,
- 'blockquote' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG
- 'body' => 1,
- 'br' => 9, // NORMAL | VOID_TAG
- 'button' => 1,
- 'canvas' => 65, // NORMAL | BLOCK_TAG
- 'caption' => 1,
- 'cite' => 1,
- 'code' => 1,
- 'col' => 9, // NORMAL | VOID_TAG
- 'colgroup' => 1,
- 'command' => 9, // NORMAL | VOID_TAG
- // "data" => 1, // This is highly experimental and only part of the whatwg spec (not w3c). See https://developer.mozilla.org/en-US/docs/HTML/Element/data
- 'datalist' => 1,
- 'dd' => 65, // NORMAL | BLOCK_TAG
- 'del' => 1,
- 'details' => 17, // NORMAL | AUTOCLOSE_P,
- 'dfn' => 1,
- 'dialog' => 17, // NORMAL | AUTOCLOSE_P,
- 'div' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG
- 'dl' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG
- 'dt' => 1,
- 'em' => 1,
- 'embed' => 9, // NORMAL | VOID_TAG
- 'fieldset' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG
- 'figcaption' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG
- 'figure' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG
- 'footer' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG
- 'form' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG
- 'h1' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG
- 'h2' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG
- 'h3' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG
- 'h4' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG
- 'h5' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG
- 'h6' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG
- 'head' => 1,
- 'header' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG
- 'hgroup' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG
- 'hr' => 73, // NORMAL | VOID_TAG
- 'html' => 1,
- 'i' => 1,
- 'iframe' => 3, // NORMAL | TEXT_RAW
- 'img' => 9, // NORMAL | VOID_TAG
- 'input' => 9, // NORMAL | VOID_TAG
- 'kbd' => 1,
- 'ins' => 1,
- 'keygen' => 9, // NORMAL | VOID_TAG
- 'label' => 1,
- 'legend' => 1,
- 'li' => 1,
- 'link' => 9, // NORMAL | VOID_TAG
- 'map' => 1,
- 'mark' => 1,
- 'menu' => 17, // NORMAL | AUTOCLOSE_P,
- 'meta' => 9, // NORMAL | VOID_TAG
- 'meter' => 1,
- 'nav' => 17, // NORMAL | AUTOCLOSE_P,
- 'noscript' => 65, // NORMAL | BLOCK_TAG
- 'object' => 1,
- 'ol' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG
- 'optgroup' => 1,
- 'option' => 1,
- 'output' => 65, // NORMAL | BLOCK_TAG
- 'p' => 209, // NORMAL | AUTOCLOSE_P | BLOCK_TAG | BLOCK_ONLY_INLINE
- 'param' => 9, // NORMAL | VOID_TAG
- 'pre' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG
- 'progress' => 1,
- 'q' => 1,
- 'rp' => 1,
- 'rt' => 1,
- 'ruby' => 1,
- 's' => 1,
- 'samp' => 1,
- 'script' => 3, // NORMAL | TEXT_RAW
- 'section' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG
- 'select' => 1,
- 'small' => 1,
- 'source' => 9, // NORMAL | VOID_TAG
- 'span' => 1,
- 'strong' => 1,
- 'style' => 3, // NORMAL | TEXT_RAW
- 'sub' => 1,
- 'summary' => 17, // NORMAL | AUTOCLOSE_P,
- 'sup' => 1,
- 'table' => 65, // NORMAL | BLOCK_TAG
- 'tbody' => 1,
- 'td' => 1,
- 'textarea' => 5, // NORMAL | TEXT_RCDATA
- 'tfoot' => 65, // NORMAL | BLOCK_TAG
- 'th' => 1,
- 'thead' => 1,
- 'time' => 1,
- 'title' => 5, // NORMAL | TEXT_RCDATA
- 'tr' => 1,
- 'track' => 9, // NORMAL | VOID_TAG
- 'u' => 1,
- 'ul' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG
- 'var' => 1,
- 'video' => 1,
- 'wbr' => 9, // NORMAL | VOID_TAG
-
- // Legacy?
- 'basefont' => 8, // VOID_TAG
- 'bgsound' => 8, // VOID_TAG
- 'noframes' => 2, // RAW_TEXT
- 'frame' => 9, // NORMAL | VOID_TAG
- 'frameset' => 1,
- 'center' => 16,
- 'dir' => 16,
- 'listing' => 16, // AUTOCLOSE_P
- 'plaintext' => 48, // AUTOCLOSE_P | TEXT_PLAINTEXT
- 'applet' => 0,
- 'marquee' => 0,
- 'isindex' => 8, // VOID_TAG
- 'xmp' => 20, // AUTOCLOSE_P | VOID_TAG | RAW_TEXT
- 'noembed' => 2, // RAW_TEXT
- );
-
- /**
- * The MathML elements.
- * See http://www.w3.org/wiki/MathML/Elements.
- *
- * In our case we are only concerned with presentation MathML and not content
- * MathML. There is a nice list of this subset at https://developer.mozilla.org/en-US/docs/MathML/Element.
- *
- * @var array
- */
- public static $mathml = array(
- 'maction' => 1,
- 'maligngroup' => 1,
- 'malignmark' => 1,
- 'math' => 1,
- 'menclose' => 1,
- 'merror' => 1,
- 'mfenced' => 1,
- 'mfrac' => 1,
- 'mglyph' => 1,
- 'mi' => 1,
- 'mlabeledtr' => 1,
- 'mlongdiv' => 1,
- 'mmultiscripts' => 1,
- 'mn' => 1,
- 'mo' => 1,
- 'mover' => 1,
- 'mpadded' => 1,
- 'mphantom' => 1,
- 'mroot' => 1,
- 'mrow' => 1,
- 'ms' => 1,
- 'mscarries' => 1,
- 'mscarry' => 1,
- 'msgroup' => 1,
- 'msline' => 1,
- 'mspace' => 1,
- 'msqrt' => 1,
- 'msrow' => 1,
- 'mstack' => 1,
- 'mstyle' => 1,
- 'msub' => 1,
- 'msup' => 1,
- 'msubsup' => 1,
- 'mtable' => 1,
- 'mtd' => 1,
- 'mtext' => 1,
- 'mtr' => 1,
- 'munder' => 1,
- 'munderover' => 1,
- );
-
- /**
- * The svg elements.
- *
- * The Mozilla documentation has a good list at https://developer.mozilla.org/en-US/docs/SVG/Element.
- * The w3c list appears to be lacking in some areas like filter effect elements.
- * That list can be found at http://www.w3.org/wiki/SVG/Elements.
- *
- * Note, FireFox appears to do a better job rendering filter effects than chrome.
- * While they are in the spec I'm not sure how widely implemented they are.
- *
- * @var array
- */
- public static $svg = array(
- 'a' => 1,
- 'altGlyph' => 1,
- 'altGlyphDef' => 1,
- 'altGlyphItem' => 1,
- 'animate' => 1,
- 'animateColor' => 1,
- 'animateMotion' => 1,
- 'animateTransform' => 1,
- 'circle' => 1,
- 'clipPath' => 1,
- 'color-profile' => 1,
- 'cursor' => 1,
- 'defs' => 1,
- 'desc' => 1,
- 'ellipse' => 1,
- 'feBlend' => 1,
- 'feColorMatrix' => 1,
- 'feComponentTransfer' => 1,
- 'feComposite' => 1,
- 'feConvolveMatrix' => 1,
- 'feDiffuseLighting' => 1,
- 'feDisplacementMap' => 1,
- 'feDistantLight' => 1,
- 'feFlood' => 1,
- 'feFuncA' => 1,
- 'feFuncB' => 1,
- 'feFuncG' => 1,
- 'feFuncR' => 1,
- 'feGaussianBlur' => 1,
- 'feImage' => 1,
- 'feMerge' => 1,
- 'feMergeNode' => 1,
- 'feMorphology' => 1,
- 'feOffset' => 1,
- 'fePointLight' => 1,
- 'feSpecularLighting' => 1,
- 'feSpotLight' => 1,
- 'feTile' => 1,
- 'feTurbulence' => 1,
- 'filter' => 1,
- 'font' => 1,
- 'font-face' => 1,
- 'font-face-format' => 1,
- 'font-face-name' => 1,
- 'font-face-src' => 1,
- 'font-face-uri' => 1,
- 'foreignObject' => 1,
- 'g' => 1,
- 'glyph' => 1,
- 'glyphRef' => 1,
- 'hkern' => 1,
- 'image' => 1,
- 'line' => 1,
- 'linearGradient' => 1,
- 'marker' => 1,
- 'mask' => 1,
- 'metadata' => 1,
- 'missing-glyph' => 1,
- 'mpath' => 1,
- 'path' => 1,
- 'pattern' => 1,
- 'polygon' => 1,
- 'polyline' => 1,
- 'radialGradient' => 1,
- 'rect' => 1,
- 'script' => 3, // NORMAL | RAW_TEXT
- 'set' => 1,
- 'stop' => 1,
- 'style' => 3, // NORMAL | RAW_TEXT
- 'svg' => 1,
- 'switch' => 1,
- 'symbol' => 1,
- 'text' => 1,
- 'textPath' => 1,
- 'title' => 1,
- 'tref' => 1,
- 'tspan' => 1,
- 'use' => 1,
- 'view' => 1,
- 'vkern' => 1,
- );
-
- /**
- * Some attributes in SVG are case sensitive.
- *
- * This map contains key/value pairs with the key as the lowercase attribute
- * name and the value with the correct casing.
- */
- public static $svgCaseSensitiveAttributeMap = array(
- 'attributename' => 'attributeName',
- 'attributetype' => 'attributeType',
- 'basefrequency' => 'baseFrequency',
- 'baseprofile' => 'baseProfile',
- 'calcmode' => 'calcMode',
- 'clippathunits' => 'clipPathUnits',
- 'contentscripttype' => 'contentScriptType',
- 'contentstyletype' => 'contentStyleType',
- 'diffuseconstant' => 'diffuseConstant',
- 'edgemode' => 'edgeMode',
- 'externalresourcesrequired' => 'externalResourcesRequired',
- 'filterres' => 'filterRes',
- 'filterunits' => 'filterUnits',
- 'glyphref' => 'glyphRef',
- 'gradienttransform' => 'gradientTransform',
- 'gradientunits' => 'gradientUnits',
- 'kernelmatrix' => 'kernelMatrix',
- 'kernelunitlength' => 'kernelUnitLength',
- 'keypoints' => 'keyPoints',
- 'keysplines' => 'keySplines',
- 'keytimes' => 'keyTimes',
- 'lengthadjust' => 'lengthAdjust',
- 'limitingconeangle' => 'limitingConeAngle',
- 'markerheight' => 'markerHeight',
- 'markerunits' => 'markerUnits',
- 'markerwidth' => 'markerWidth',
- 'maskcontentunits' => 'maskContentUnits',
- 'maskunits' => 'maskUnits',
- 'numoctaves' => 'numOctaves',
- 'pathlength' => 'pathLength',
- 'patterncontentunits' => 'patternContentUnits',
- 'patterntransform' => 'patternTransform',
- 'patternunits' => 'patternUnits',
- 'pointsatx' => 'pointsAtX',
- 'pointsaty' => 'pointsAtY',
- 'pointsatz' => 'pointsAtZ',
- 'preservealpha' => 'preserveAlpha',
- 'preserveaspectratio' => 'preserveAspectRatio',
- 'primitiveunits' => 'primitiveUnits',
- 'refx' => 'refX',
- 'refy' => 'refY',
- 'repeatcount' => 'repeatCount',
- 'repeatdur' => 'repeatDur',
- 'requiredextensions' => 'requiredExtensions',
- 'requiredfeatures' => 'requiredFeatures',
- 'specularconstant' => 'specularConstant',
- 'specularexponent' => 'specularExponent',
- 'spreadmethod' => 'spreadMethod',
- 'startoffset' => 'startOffset',
- 'stddeviation' => 'stdDeviation',
- 'stitchtiles' => 'stitchTiles',
- 'surfacescale' => 'surfaceScale',
- 'systemlanguage' => 'systemLanguage',
- 'tablevalues' => 'tableValues',
- 'targetx' => 'targetX',
- 'targety' => 'targetY',
- 'textlength' => 'textLength',
- 'viewbox' => 'viewBox',
- 'viewtarget' => 'viewTarget',
- 'xchannelselector' => 'xChannelSelector',
- 'ychannelselector' => 'yChannelSelector',
- 'zoomandpan' => 'zoomAndPan',
- );
-
- /**
- * Some SVG elements are case sensitive.
- * This map contains these.
- *
- * The map contains key/value store of the name is lowercase as the keys and
- * the correct casing as the value.
- */
- public static $svgCaseSensitiveElementMap = array(
- 'altglyph' => 'altGlyph',
- 'altglyphdef' => 'altGlyphDef',
- 'altglyphitem' => 'altGlyphItem',
- 'animatecolor' => 'animateColor',
- 'animatemotion' => 'animateMotion',
- 'animatetransform' => 'animateTransform',
- 'clippath' => 'clipPath',
- 'feblend' => 'feBlend',
- 'fecolormatrix' => 'feColorMatrix',
- 'fecomponenttransfer' => 'feComponentTransfer',
- 'fecomposite' => 'feComposite',
- 'feconvolvematrix' => 'feConvolveMatrix',
- 'fediffuselighting' => 'feDiffuseLighting',
- 'fedisplacementmap' => 'feDisplacementMap',
- 'fedistantlight' => 'feDistantLight',
- 'feflood' => 'feFlood',
- 'fefunca' => 'feFuncA',
- 'fefuncb' => 'feFuncB',
- 'fefuncg' => 'feFuncG',
- 'fefuncr' => 'feFuncR',
- 'fegaussianblur' => 'feGaussianBlur',
- 'feimage' => 'feImage',
- 'femerge' => 'feMerge',
- 'femergenode' => 'feMergeNode',
- 'femorphology' => 'feMorphology',
- 'feoffset' => 'feOffset',
- 'fepointlight' => 'fePointLight',
- 'fespecularlighting' => 'feSpecularLighting',
- 'fespotlight' => 'feSpotLight',
- 'fetile' => 'feTile',
- 'feturbulence' => 'feTurbulence',
- 'foreignobject' => 'foreignObject',
- 'glyphref' => 'glyphRef',
- 'lineargradient' => 'linearGradient',
- 'radialgradient' => 'radialGradient',
- 'textpath' => 'textPath',
- );
-
- /**
- * Check whether the given element meets the given criterion.
- *
- * Example:
- *
- * Elements::isA('script', Elements::TEXT_RAW); // Returns true.
- *
- * Elements::isA('script', Elements::TEXT_RCDATA); // Returns false.
- *
- * @param string $name The element name.
- * @param int $mask One of the constants on this class.
- *
- * @return bool true if the element matches the mask, false otherwise.
- */
- public static function isA($name, $mask)
- {
- return (static::element($name) & $mask) === $mask;
- }
-
- /**
- * Test if an element is a valid html5 element.
- *
- * @param string $name The name of the element.
- *
- * @return bool true if a html5 element and false otherwise.
- */
- public static function isHtml5Element($name)
- {
- // html5 element names are case insensitive. Forcing lowercase for the check.
- // Do we need this check or will all data passed here already be lowercase?
- return isset(static::$html5[strtolower($name)]);
- }
-
- /**
- * Test if an element name is a valid MathML presentation element.
- *
- * @param string $name The name of the element.
- *
- * @return bool true if a MathML name and false otherwise.
- */
- public static function isMathMLElement($name)
- {
- // MathML is case-sensitive unlike html5 elements.
- return isset(static::$mathml[$name]);
- }
-
- /**
- * Test if an element is a valid SVG element.
- *
- * @param string $name The name of the element.
- *
- * @return bool true if a SVG element and false otherise.
- */
- public static function isSvgElement($name)
- {
- // SVG is case-sensitive unlike html5 elements.
- return isset(static::$svg[$name]);
- }
-
- /**
- * Is an element name valid in an html5 document.
- * This includes html5 elements along with other allowed embedded content
- * such as svg and mathml.
- *
- * @param string $name The name of the element.
- *
- * @return bool true if valid and false otherwise.
- */
- public static function isElement($name)
- {
- return static::isHtml5Element($name) || static::isMathMLElement($name) || static::isSvgElement($name);
- }
-
- /**
- * Get the element mask for the given element name.
- *
- * @param string $name The name of the element.
- *
- * @return int the element mask.
- */
- public static function element($name)
- {
- if (isset(static::$html5[$name])) {
- return static::$html5[$name];
- }
- if (isset(static::$svg[$name])) {
- return static::$svg[$name];
- }
- if (isset(static::$mathml[$name])) {
- return static::$mathml[$name];
- }
-
- return 0;
- }
-
- /**
- * Normalize a SVG element name to its proper case and form.
- *
- * @param string $name The name of the element.
- *
- * @return string the normalized form of the element name.
- */
- public static function normalizeSvgElement($name)
- {
- $name = strtolower($name);
- if (isset(static::$svgCaseSensitiveElementMap[$name])) {
- $name = static::$svgCaseSensitiveElementMap[$name];
- }
-
- return $name;
- }
-
- /**
- * Normalize a SVG attribute name to its proper case and form.
- *
- * @param string $name The name of the attribute.
- *
- * @return string The normalized form of the attribute name.
- */
- public static function normalizeSvgAttribute($name)
- {
- $name = strtolower($name);
- if (isset(static::$svgCaseSensitiveAttributeMap[$name])) {
- $name = static::$svgCaseSensitiveAttributeMap[$name];
- }
-
- return $name;
- }
-
- /**
- * Normalize a MathML attribute name to its proper case and form.
- * Note, all MathML element names are lowercase.
- *
- * @param string $name The name of the attribute.
- *
- * @return string The normalized form of the attribute name.
- */
- public static function normalizeMathMlAttribute($name)
- {
- $name = strtolower($name);
-
- // Only one attribute has a mixed case form for MathML.
- if ('definitionurl' === $name) {
- $name = 'definitionURL';
- }
-
- return $name;
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/masterminds/html5/src/HTML5/Entities.php b/fixtures/symfony_5_local_deps/vendor/masterminds/html5/src/HTML5/Entities.php
deleted file mode 100644
index 0e7227dc1..000000000
--- a/fixtures/symfony_5_local_deps/vendor/masterminds/html5/src/HTML5/Entities.php
+++ /dev/null
@@ -1,2236 +0,0 @@
- 'Ã',
- 'Aacut' => 'Ã',
- 'aacute' => 'á',
- 'aacut' => 'á',
- 'Abreve' => 'Ä‚',
- 'abreve' => 'ă',
- 'ac' => '∾',
- 'acd' => '∿',
- 'acE' => '∾̳',
- 'Acirc' => 'Â',
- 'Acir' => 'Â',
- 'acirc' => 'â',
- 'acir' => 'â',
- 'acute' => '´',
- 'acut' => '´',
- 'Acy' => 'Ð',
- 'acy' => 'а',
- 'AElig' => 'Æ',
- 'AEli' => 'Æ',
- 'aelig' => 'æ',
- 'aeli' => 'æ',
- 'af' => 'â¡',
- 'Afr' => 'ð”„',
- 'afr' => 'ð”ž',
- 'Agrave' => 'À',
- 'Agrav' => 'À',
- 'agrave' => 'Ã ',
- 'agrav' => 'Ã ',
- 'alefsym' => 'ℵ',
- 'aleph' => 'ℵ',
- 'Alpha' => 'Α',
- 'alpha' => 'α',
- 'Amacr' => 'Ä€',
- 'amacr' => 'Ä',
- 'amalg' => '⨿',
- 'AMP' => '&',
- 'AM' => '&',
- 'amp' => '&',
- 'am' => '&',
- 'And' => 'â©“',
- 'and' => '∧',
- 'andand' => 'â©•',
- 'andd' => '⩜',
- 'andslope' => '⩘',
- 'andv' => '⩚',
- 'ang' => '∠',
- 'ange' => '⦤',
- 'angle' => '∠',
- 'angmsd' => '∡',
- 'angmsdaa' => '⦨',
- 'angmsdab' => '⦩',
- 'angmsdac' => '⦪',
- 'angmsdad' => '⦫',
- 'angmsdae' => '⦬',
- 'angmsdaf' => 'â¦',
- 'angmsdag' => '⦮',
- 'angmsdah' => '⦯',
- 'angrt' => '∟',
- 'angrtvb' => '⊾',
- 'angrtvbd' => 'â¦',
- 'angsph' => '∢',
- 'angst' => 'Ã…',
- 'angzarr' => 'â¼',
- 'Aogon' => 'Ä„',
- 'aogon' => 'Ä…',
- 'Aopf' => 'ð”¸',
- 'aopf' => 'ð•’',
- 'ap' => '≈',
- 'apacir' => '⩯',
- 'apE' => 'â©°',
- 'ape' => '≊',
- 'apid' => '≋',
- 'apos' => '\'',
- 'ApplyFunction' => 'â¡',
- 'approx' => '≈',
- 'approxeq' => '≊',
- 'Aring' => 'Ã…',
- 'Arin' => 'Ã…',
- 'aring' => 'Ã¥',
- 'arin' => 'Ã¥',
- 'Ascr' => 'ð’œ',
- 'ascr' => 'ð’¶',
- 'Assign' => '≔',
- 'ast' => '*',
- 'asymp' => '≈',
- 'asympeq' => 'â‰',
- 'Atilde' => 'Ã',
- 'Atild' => 'Ã',
- 'atilde' => 'ã',
- 'atild' => 'ã',
- 'Auml' => 'Ä',
- 'Aum' => 'Ä',
- 'auml' => 'ä',
- 'aum' => 'ä',
- 'awconint' => '∳',
- 'awint' => '⨑',
- 'backcong' => '≌',
- 'backepsilon' => '϶',
- 'backprime' => '‵',
- 'backsim' => '∽',
- 'backsimeq' => 'â‹',
- 'Backslash' => '∖',
- 'Barv' => 'â«§',
- 'barvee' => '⊽',
- 'Barwed' => '⌆',
- 'barwed' => '⌅',
- 'barwedge' => '⌅',
- 'bbrk' => '⎵',
- 'bbrktbrk' => '⎶',
- 'bcong' => '≌',
- 'Bcy' => 'Б',
- 'bcy' => 'б',
- 'bdquo' => '„',
- 'becaus' => '∵',
- 'Because' => '∵',
- 'because' => '∵',
- 'bemptyv' => '⦰',
- 'bepsi' => '϶',
- 'bernou' => 'ℬ',
- 'Bernoullis' => 'ℬ',
- 'Beta' => 'Î’',
- 'beta' => 'β',
- 'beth' => 'â„¶',
- 'between' => '≬',
- 'Bfr' => 'ð”…',
- 'bfr' => 'ð”Ÿ',
- 'bigcap' => 'â‹‚',
- 'bigcirc' => 'â—¯',
- 'bigcup' => '⋃',
- 'bigodot' => '⨀',
- 'bigoplus' => 'â¨',
- 'bigotimes' => '⨂',
- 'bigsqcup' => '⨆',
- 'bigstar' => '★',
- 'bigtriangledown' => 'â–½',
- 'bigtriangleup' => 'â–³',
- 'biguplus' => '⨄',
- 'bigvee' => 'â‹',
- 'bigwedge' => 'â‹€',
- 'bkarow' => 'â¤',
- 'blacklozenge' => 'â§«',
- 'blacksquare' => 'â–ª',
- 'blacktriangle' => 'â–´',
- 'blacktriangledown' => 'â–¾',
- 'blacktriangleleft' => 'â—‚',
- 'blacktriangleright' => 'â–¸',
- 'blank' => 'â£',
- 'blk12' => 'â–’',
- 'blk14' => 'â–‘',
- 'blk34' => 'â–“',
- 'block' => 'â–ˆ',
- 'bne' => '=⃥',
- 'bnequiv' => '≡⃥',
- 'bNot' => 'â«',
- 'bnot' => 'âŒ',
- 'Bopf' => 'ð”¹',
- 'bopf' => 'ð•“',
- 'bot' => '⊥',
- 'bottom' => '⊥',
- 'bowtie' => '⋈',
- 'boxbox' => '⧉',
- 'boxDL' => 'â•—',
- 'boxDl' => 'â•–',
- 'boxdL' => 'â••',
- 'boxdl' => 'â”',
- 'boxDR' => 'â•”',
- 'boxDr' => 'â•“',
- 'boxdR' => 'â•’',
- 'boxdr' => '┌',
- 'boxH' => 'â•',
- 'boxh' => '─',
- 'boxHD' => '╦',
- 'boxHd' => '╤',
- 'boxhD' => 'â•¥',
- 'boxhd' => '┬',
- 'boxHU' => 'â•©',
- 'boxHu' => 'â•§',
- 'boxhU' => '╨',
- 'boxhu' => 'â”´',
- 'boxminus' => '⊟',
- 'boxplus' => '⊞',
- 'boxtimes' => '⊠',
- 'boxUL' => 'â•',
- 'boxUl' => '╜',
- 'boxuL' => 'â•›',
- 'boxul' => '┘',
- 'boxUR' => '╚',
- 'boxUr' => 'â•™',
- 'boxuR' => '╘',
- 'boxur' => 'â””',
- 'boxV' => 'â•‘',
- 'boxv' => '│',
- 'boxVH' => '╬',
- 'boxVh' => 'â•«',
- 'boxvH' => '╪',
- 'boxvh' => '┼',
- 'boxVL' => 'â•£',
- 'boxVl' => 'â•¢',
- 'boxvL' => 'â•¡',
- 'boxvl' => '┤',
- 'boxVR' => 'â• ',
- 'boxVr' => '╟',
- 'boxvR' => '╞',
- 'boxvr' => '├',
- 'bprime' => '‵',
- 'Breve' => '˘',
- 'breve' => '˘',
- 'brvbar' => '¦',
- 'brvba' => '¦',
- 'Bscr' => 'ℬ',
- 'bscr' => 'ð’·',
- 'bsemi' => 'â',
- 'bsim' => '∽',
- 'bsime' => 'â‹',
- 'bsol' => '\\',
- 'bsolb' => 'â§…',
- 'bsolhsub' => '⟈',
- 'bull' => '•',
- 'bullet' => '•',
- 'bump' => '≎',
- 'bumpE' => '⪮',
- 'bumpe' => 'â‰',
- 'Bumpeq' => '≎',
- 'bumpeq' => 'â‰',
- 'Cacute' => 'Ć',
- 'cacute' => 'ć',
- 'Cap' => 'â‹’',
- 'cap' => '∩',
- 'capand' => 'â©„',
- 'capbrcup' => '⩉',
- 'capcap' => 'â©‹',
- 'capcup' => '⩇',
- 'capdot' => 'â©€',
- 'CapitalDifferentialD' => 'â……',
- 'caps' => '∩︀',
- 'caret' => 'â',
- 'caron' => 'ˇ',
- 'Cayleys' => 'â„',
- 'ccaps' => 'â©',
- 'Ccaron' => 'Č',
- 'ccaron' => 'Ä',
- 'Ccedil' => 'Ç',
- 'Ccedi' => 'Ç',
- 'ccedil' => 'ç',
- 'ccedi' => 'ç',
- 'Ccirc' => 'Ĉ',
- 'ccirc' => 'ĉ',
- 'Cconint' => '∰',
- 'ccups' => '⩌',
- 'ccupssm' => 'â©',
- 'Cdot' => 'ÄŠ',
- 'cdot' => 'Ä‹',
- 'cedil' => '¸',
- 'cedi' => '¸',
- 'Cedilla' => '¸',
- 'cemptyv' => '⦲',
- 'cent' => '¢',
- 'cen' => '¢',
- 'CenterDot' => '·',
- 'centerdot' => '·',
- 'Cfr' => 'â„',
- 'cfr' => 'ð” ',
- 'CHcy' => 'Ч',
- 'chcy' => 'ч',
- 'check' => '✓',
- 'checkmark' => '✓',
- 'Chi' => 'Χ',
- 'chi' => 'χ',
- 'cir' => 'â—‹',
- 'circ' => 'ˆ',
- 'circeq' => '≗',
- 'circlearrowleft' => '↺',
- 'circlearrowright' => '↻',
- 'circledast' => '⊛',
- 'circledcirc' => '⊚',
- 'circleddash' => 'âŠ',
- 'CircleDot' => '⊙',
- 'circledR' => '®',
- 'circledS' => 'Ⓢ',
- 'CircleMinus' => '⊖',
- 'CirclePlus' => '⊕',
- 'CircleTimes' => '⊗',
- 'cirE' => '⧃',
- 'cire' => '≗',
- 'cirfnint' => 'â¨',
- 'cirmid' => '⫯',
- 'cirscir' => 'â§‚',
- 'ClockwiseContourIntegral' => '∲',
- 'CloseCurlyDoubleQuote' => 'â€',
- 'CloseCurlyQuote' => '’',
- 'clubs' => '♣',
- 'clubsuit' => '♣',
- 'Colon' => '∷',
- 'colon' => ':',
- 'Colone' => 'â©´',
- 'colone' => '≔',
- 'coloneq' => '≔',
- 'comma' => ',',
- 'commat' => '@',
- 'comp' => 'âˆ',
- 'compfn' => '∘',
- 'complement' => 'âˆ',
- 'complexes' => 'â„‚',
- 'cong' => '≅',
- 'congdot' => 'â©',
- 'Congruent' => '≡',
- 'Conint' => '∯',
- 'conint' => '∮',
- 'ContourIntegral' => '∮',
- 'Copf' => 'â„‚',
- 'copf' => 'ð•”',
- 'coprod' => 'âˆ',
- 'Coproduct' => 'âˆ',
- 'COPY' => '©',
- 'COP' => '©',
- 'copy' => '©',
- 'cop' => '©',
- 'copysr' => 'â„—',
- 'CounterClockwiseContourIntegral' => '∳',
- 'crarr' => '↵',
- 'Cross' => '⨯',
- 'cross' => '✗',
- 'Cscr' => 'ð’ž',
- 'cscr' => 'ð’¸',
- 'csub' => 'â«',
- 'csube' => 'â«‘',
- 'csup' => 'â«',
- 'csupe' => 'â«’',
- 'ctdot' => '⋯',
- 'cudarrl' => '⤸',
- 'cudarrr' => '⤵',
- 'cuepr' => '⋞',
- 'cuesc' => '⋟',
- 'cularr' => '↶',
- 'cularrp' => '⤽',
- 'Cup' => 'â‹“',
- 'cup' => '∪',
- 'cupbrcap' => '⩈',
- 'CupCap' => 'â‰',
- 'cupcap' => '⩆',
- 'cupcup' => '⩊',
- 'cupdot' => 'âŠ',
- 'cupor' => 'â©…',
- 'cups' => '∪︀',
- 'curarr' => '↷',
- 'curarrm' => '⤼',
- 'curlyeqprec' => '⋞',
- 'curlyeqsucc' => '⋟',
- 'curlyvee' => '⋎',
- 'curlywedge' => 'â‹',
- 'curren' => '¤',
- 'curre' => '¤',
- 'curvearrowleft' => '↶',
- 'curvearrowright' => '↷',
- 'cuvee' => '⋎',
- 'cuwed' => 'â‹',
- 'cwconint' => '∲',
- 'cwint' => '∱',
- 'cylcty' => 'âŒ',
- 'Dagger' => '‡',
- 'dagger' => '†',
- 'daleth' => 'ℸ',
- 'Darr' => '↡',
- 'dArr' => '⇓',
- 'darr' => '↓',
- 'dash' => 'â€',
- 'Dashv' => '⫤',
- 'dashv' => '⊣',
- 'dbkarow' => 'â¤',
- 'dblac' => 'Ë',
- 'Dcaron' => 'ÄŽ',
- 'dcaron' => 'Ä',
- 'Dcy' => 'Д',
- 'dcy' => 'д',
- 'DD' => 'â……',
- 'dd' => 'â…†',
- 'ddagger' => '‡',
- 'ddarr' => '⇊',
- 'DDotrahd' => '⤑',
- 'ddotseq' => 'â©·',
- 'deg' => '°',
- 'de' => '°',
- 'Del' => '∇',
- 'Delta' => 'Δ',
- 'delta' => 'δ',
- 'demptyv' => '⦱',
- 'dfisht' => '⥿',
- 'Dfr' => 'ð”‡',
- 'dfr' => 'ð”¡',
- 'dHar' => '⥥',
- 'dharl' => '⇃',
- 'dharr' => '⇂',
- 'DiacriticalAcute' => '´',
- 'DiacriticalDot' => 'Ë™',
- 'DiacriticalDoubleAcute' => 'Ë',
- 'DiacriticalGrave' => '`',
- 'DiacriticalTilde' => '˜',
- 'diam' => 'â‹„',
- 'Diamond' => 'â‹„',
- 'diamond' => 'â‹„',
- 'diamondsuit' => '♦',
- 'diams' => '♦',
- 'die' => '¨',
- 'DifferentialD' => 'â…†',
- 'digamma' => 'Ï',
- 'disin' => '⋲',
- 'div' => '÷',
- 'divide' => '÷',
- 'divid' => '÷',
- 'divideontimes' => '⋇',
- 'divonx' => '⋇',
- 'DJcy' => 'Ђ',
- 'djcy' => 'Ñ’',
- 'dlcorn' => '⌞',
- 'dlcrop' => 'âŒ',
- 'dollar' => '$',
- 'Dopf' => 'ð”»',
- 'dopf' => 'ð••',
- 'Dot' => '¨',
- 'dot' => 'Ë™',
- 'DotDot' => '⃜',
- 'doteq' => 'â‰',
- 'doteqdot' => '≑',
- 'DotEqual' => 'â‰',
- 'dotminus' => '∸',
- 'dotplus' => '∔',
- 'dotsquare' => '⊡',
- 'doublebarwedge' => '⌆',
- 'DoubleContourIntegral' => '∯',
- 'DoubleDot' => '¨',
- 'DoubleDownArrow' => '⇓',
- 'DoubleLeftArrow' => 'â‡',
- 'DoubleLeftRightArrow' => '⇔',
- 'DoubleLeftTee' => '⫤',
- 'DoubleLongLeftArrow' => '⟸',
- 'DoubleLongLeftRightArrow' => '⟺',
- 'DoubleLongRightArrow' => '⟹',
- 'DoubleRightArrow' => '⇒',
- 'DoubleRightTee' => '⊨',
- 'DoubleUpArrow' => '⇑',
- 'DoubleUpDownArrow' => '⇕',
- 'DoubleVerticalBar' => '∥',
- 'DownArrow' => '↓',
- 'Downarrow' => '⇓',
- 'downarrow' => '↓',
- 'DownArrowBar' => '⤓',
- 'DownArrowUpArrow' => '⇵',
- 'DownBreve' => 'Ì‘',
- 'downdownarrows' => '⇊',
- 'downharpoonleft' => '⇃',
- 'downharpoonright' => '⇂',
- 'DownLeftRightVector' => 'â¥',
- 'DownLeftTeeVector' => '⥞',
- 'DownLeftVector' => '↽',
- 'DownLeftVectorBar' => '⥖',
- 'DownRightTeeVector' => '⥟',
- 'DownRightVector' => 'â‡',
- 'DownRightVectorBar' => '⥗',
- 'DownTee' => '⊤',
- 'DownTeeArrow' => '↧',
- 'drbkarow' => 'â¤',
- 'drcorn' => '⌟',
- 'drcrop' => '⌌',
- 'Dscr' => 'ð’Ÿ',
- 'dscr' => 'ð’¹',
- 'DScy' => 'Ð…',
- 'dscy' => 'Ñ•',
- 'dsol' => 'â§¶',
- 'Dstrok' => 'Ä',
- 'dstrok' => 'Ä‘',
- 'dtdot' => '⋱',
- 'dtri' => 'â–¿',
- 'dtrif' => 'â–¾',
- 'duarr' => '⇵',
- 'duhar' => '⥯',
- 'dwangle' => '⦦',
- 'DZcy' => 'Ð',
- 'dzcy' => 'ÑŸ',
- 'dzigrarr' => '⟿',
- 'Eacute' => 'É',
- 'Eacut' => 'É',
- 'eacute' => 'é',
- 'eacut' => 'é',
- 'easter' => 'â©®',
- 'Ecaron' => 'Äš',
- 'ecaron' => 'Ä›',
- 'ecir' => 'ê',
- 'Ecirc' => 'Ê',
- 'Ecir' => 'Ê',
- 'ecirc' => 'ê',
- 'ecolon' => '≕',
- 'Ecy' => 'Ð',
- 'ecy' => 'Ñ',
- 'eDDot' => 'â©·',
- 'Edot' => 'Ä–',
- 'eDot' => '≑',
- 'edot' => 'Ä—',
- 'ee' => 'â…‡',
- 'efDot' => '≒',
- 'Efr' => 'ð”ˆ',
- 'efr' => 'ð”¢',
- 'eg' => '⪚',
- 'Egrave' => 'È',
- 'Egrav' => 'È',
- 'egrave' => 'è',
- 'egrav' => 'è',
- 'egs' => '⪖',
- 'egsdot' => '⪘',
- 'el' => '⪙',
- 'Element' => '∈',
- 'elinters' => 'â§',
- 'ell' => 'â„“',
- 'els' => '⪕',
- 'elsdot' => '⪗',
- 'Emacr' => 'Ä’',
- 'emacr' => 'Ä“',
- 'empty' => '∅',
- 'emptyset' => '∅',
- 'EmptySmallSquare' => 'â—»',
- 'emptyv' => '∅',
- 'EmptyVerySmallSquare' => 'â–«',
- 'emsp' => ' ',
- 'emsp13' => ' ',
- 'emsp14' => ' ',
- 'ENG' => 'ÅŠ',
- 'eng' => 'Å‹',
- 'ensp' => ' ',
- 'Eogon' => 'Ę',
- 'eogon' => 'Ä™',
- 'Eopf' => 'ð”¼',
- 'eopf' => 'ð•–',
- 'epar' => 'â‹•',
- 'eparsl' => 'â§£',
- 'eplus' => '⩱',
- 'epsi' => 'ε',
- 'Epsilon' => 'Ε',
- 'epsilon' => 'ε',
- 'epsiv' => 'ϵ',
- 'eqcirc' => '≖',
- 'eqcolon' => '≕',
- 'eqsim' => '≂',
- 'eqslantgtr' => '⪖',
- 'eqslantless' => '⪕',
- 'Equal' => '⩵',
- 'equals' => '=',
- 'EqualTilde' => '≂',
- 'equest' => '≟',
- 'Equilibrium' => '⇌',
- 'equiv' => '≡',
- 'equivDD' => '⩸',
- 'eqvparsl' => 'â§¥',
- 'erarr' => '⥱',
- 'erDot' => '≓',
- 'Escr' => 'â„°',
- 'escr' => 'ℯ',
- 'esdot' => 'â‰',
- 'Esim' => '⩳',
- 'esim' => '≂',
- 'Eta' => 'Η',
- 'eta' => 'η',
- 'ETH' => 'Ã',
- 'ET' => 'Ã',
- 'eth' => 'ð',
- 'et' => 'ð',
- 'Euml' => 'Ë',
- 'Eum' => 'Ë',
- 'euml' => 'ë',
- 'eum' => 'ë',
- 'euro' => '€',
- 'excl' => '!',
- 'exist' => '∃',
- 'Exists' => '∃',
- 'expectation' => 'â„°',
- 'ExponentialE' => 'â…‡',
- 'exponentiale' => 'â…‡',
- 'fallingdotseq' => '≒',
- 'Fcy' => 'Ф',
- 'fcy' => 'Ñ„',
- 'female' => '♀',
- 'ffilig' => 'ffi',
- 'fflig' => 'ff',
- 'ffllig' => 'ffl',
- 'Ffr' => 'ð”‰',
- 'ffr' => 'ð”£',
- 'filig' => 'ï¬',
- 'FilledSmallSquare' => 'â—¼',
- 'FilledVerySmallSquare' => 'â–ª',
- 'fjlig' => 'fj',
- 'flat' => 'â™',
- 'fllig' => 'fl',
- 'fltns' => 'â–±',
- 'fnof' => 'Æ’',
- 'Fopf' => 'ð”½',
- 'fopf' => 'ð•—',
- 'ForAll' => '∀',
- 'forall' => '∀',
- 'fork' => 'â‹”',
- 'forkv' => 'â«™',
- 'Fouriertrf' => 'ℱ',
- 'fpartint' => 'â¨',
- 'frac12' => '½',
- 'frac1' => '¼',
- 'frac13' => 'â…“',
- 'frac14' => '¼',
- 'frac15' => 'â…•',
- 'frac16' => 'â…™',
- 'frac18' => 'â…›',
- 'frac23' => 'â…”',
- 'frac25' => 'â…–',
- 'frac34' => '¾',
- 'frac3' => '¾',
- 'frac35' => 'â…—',
- 'frac38' => '⅜',
- 'frac45' => 'â…˜',
- 'frac56' => 'â…š',
- 'frac58' => 'â…',
- 'frac78' => 'â…ž',
- 'frasl' => 'â„',
- 'frown' => '⌢',
- 'Fscr' => 'ℱ',
- 'fscr' => 'ð’»',
- 'gacute' => 'ǵ',
- 'Gamma' => 'Γ',
- 'gamma' => 'γ',
- 'Gammad' => 'Ϝ',
- 'gammad' => 'Ï',
- 'gap' => '⪆',
- 'Gbreve' => 'Äž',
- 'gbreve' => 'ÄŸ',
- 'Gcedil' => 'Ä¢',
- 'Gcirc' => 'Ĝ',
- 'gcirc' => 'Ä',
- 'Gcy' => 'Г',
- 'gcy' => 'г',
- 'Gdot' => 'Ä ',
- 'gdot' => 'Ä¡',
- 'gE' => '≧',
- 'ge' => '≥',
- 'gEl' => '⪌',
- 'gel' => 'â‹›',
- 'geq' => '≥',
- 'geqq' => '≧',
- 'geqslant' => '⩾',
- 'ges' => '⩾',
- 'gescc' => '⪩',
- 'gesdot' => '⪀',
- 'gesdoto' => '⪂',
- 'gesdotol' => '⪄',
- 'gesl' => '⋛︀',
- 'gesles' => '⪔',
- 'Gfr' => 'ð”Š',
- 'gfr' => 'ð”¤',
- 'Gg' => 'â‹™',
- 'gg' => '≫',
- 'ggg' => 'â‹™',
- 'gimel' => 'â„·',
- 'GJcy' => 'Ѓ',
- 'gjcy' => 'Ñ“',
- 'gl' => '≷',
- 'gla' => '⪥',
- 'glE' => '⪒',
- 'glj' => '⪤',
- 'gnap' => '⪊',
- 'gnapprox' => '⪊',
- 'gnE' => '≩',
- 'gne' => '⪈',
- 'gneq' => '⪈',
- 'gneqq' => '≩',
- 'gnsim' => 'â‹§',
- 'Gopf' => 'ð”¾',
- 'gopf' => 'ð•˜',
- 'grave' => '`',
- 'GreaterEqual' => '≥',
- 'GreaterEqualLess' => 'â‹›',
- 'GreaterFullEqual' => '≧',
- 'GreaterGreater' => '⪢',
- 'GreaterLess' => '≷',
- 'GreaterSlantEqual' => '⩾',
- 'GreaterTilde' => '≳',
- 'Gscr' => 'ð’¢',
- 'gscr' => 'ℊ',
- 'gsim' => '≳',
- 'gsime' => '⪎',
- 'gsiml' => 'âª',
- 'GT' => '>',
- 'G' => '>',
- 'Gt' => '≫',
- 'gt' => '>',
- 'g' => '>',
- 'gtcc' => '⪧',
- 'gtcir' => '⩺',
- 'gtdot' => 'â‹—',
- 'gtlPar' => '⦕',
- 'gtquest' => '⩼',
- 'gtrapprox' => '⪆',
- 'gtrarr' => '⥸',
- 'gtrdot' => 'â‹—',
- 'gtreqless' => 'â‹›',
- 'gtreqqless' => '⪌',
- 'gtrless' => '≷',
- 'gtrsim' => '≳',
- 'gvertneqq' => '≩︀',
- 'gvnE' => '≩︀',
- 'Hacek' => 'ˇ',
- 'hairsp' => ' ',
- 'half' => '½',
- 'hamilt' => 'â„‹',
- 'HARDcy' => 'Ъ',
- 'hardcy' => 'ÑŠ',
- 'hArr' => '⇔',
- 'harr' => '↔',
- 'harrcir' => '⥈',
- 'harrw' => 'â†',
- 'Hat' => '^',
- 'hbar' => 'â„',
- 'Hcirc' => 'Ĥ',
- 'hcirc' => 'Ä¥',
- 'hearts' => '♥',
- 'heartsuit' => '♥',
- 'hellip' => '…',
- 'hercon' => '⊹',
- 'Hfr' => 'ℌ',
- 'hfr' => 'ð”¥',
- 'HilbertSpace' => 'â„‹',
- 'hksearow' => '⤥',
- 'hkswarow' => '⤦',
- 'hoarr' => '⇿',
- 'homtht' => '∻',
- 'hookleftarrow' => '↩',
- 'hookrightarrow' => '↪',
- 'Hopf' => 'â„',
- 'hopf' => 'ð•™',
- 'horbar' => '―',
- 'HorizontalLine' => '─',
- 'Hscr' => 'â„‹',
- 'hscr' => 'ð’½',
- 'hslash' => 'â„',
- 'Hstrok' => 'Ħ',
- 'hstrok' => 'ħ',
- 'HumpDownHump' => '≎',
- 'HumpEqual' => 'â‰',
- 'hybull' => 'âƒ',
- 'hyphen' => 'â€',
- 'Iacute' => 'Ã',
- 'Iacut' => 'Ã',
- 'iacute' => 'Ã',
- 'iacut' => 'Ã',
- 'ic' => 'â£',
- 'Icirc' => 'ÃŽ',
- 'Icir' => 'ÃŽ',
- 'icirc' => 'î',
- 'icir' => 'î',
- 'Icy' => 'И',
- 'icy' => 'и',
- 'Idot' => 'İ',
- 'IEcy' => 'Е',
- 'iecy' => 'е',
- 'iexcl' => '¡',
- 'iexc' => '¡',
- 'iff' => '⇔',
- 'Ifr' => 'â„‘',
- 'ifr' => 'ð”¦',
- 'Igrave' => 'Ì',
- 'Igrav' => 'Ì',
- 'igrave' => 'ì',
- 'igrav' => 'ì',
- 'ii' => 'â…ˆ',
- 'iiiint' => '⨌',
- 'iiint' => 'âˆ',
- 'iinfin' => '⧜',
- 'iiota' => 'â„©',
- 'IJlig' => 'IJ',
- 'ijlig' => 'ij',
- 'Im' => 'â„‘',
- 'Imacr' => 'Ī',
- 'imacr' => 'Ä«',
- 'image' => 'â„‘',
- 'ImaginaryI' => 'â…ˆ',
- 'imagline' => 'â„',
- 'imagpart' => 'â„‘',
- 'imath' => 'ı',
- 'imof' => '⊷',
- 'imped' => 'Ƶ',
- 'Implies' => '⇒',
- 'in' => '∈',
- 'incare' => 'â„…',
- 'infin' => '∞',
- 'infintie' => 'â§',
- 'inodot' => 'ı',
- 'Int' => '∬',
- 'int' => '∫',
- 'intcal' => '⊺',
- 'integers' => 'ℤ',
- 'Integral' => '∫',
- 'intercal' => '⊺',
- 'Intersection' => 'â‹‚',
- 'intlarhk' => '⨗',
- 'intprod' => '⨼',
- 'InvisibleComma' => 'â£',
- 'InvisibleTimes' => 'â¢',
- 'IOcy' => 'Ð',
- 'iocy' => 'Ñ‘',
- 'Iogon' => 'Ä®',
- 'iogon' => 'į',
- 'Iopf' => 'ð•€',
- 'iopf' => 'ð•š',
- 'Iota' => 'Ι',
- 'iota' => 'ι',
- 'iprod' => '⨼',
- 'iquest' => '¿',
- 'iques' => '¿',
- 'Iscr' => 'â„',
- 'iscr' => 'ð’¾',
- 'isin' => '∈',
- 'isindot' => '⋵',
- 'isinE' => '⋹',
- 'isins' => 'â‹´',
- 'isinsv' => '⋳',
- 'isinv' => '∈',
- 'it' => 'â¢',
- 'Itilde' => 'Ĩ',
- 'itilde' => 'Ä©',
- 'Iukcy' => 'І',
- 'iukcy' => 'Ñ–',
- 'Iuml' => 'Ã',
- 'Ium' => 'Ã',
- 'iuml' => 'ï',
- 'ium' => 'ï',
- 'Jcirc' => 'Ä´',
- 'jcirc' => 'ĵ',
- 'Jcy' => 'Й',
- 'jcy' => 'й',
- 'Jfr' => 'ð”',
- 'jfr' => 'ð”§',
- 'jmath' => 'È·',
- 'Jopf' => 'ð•',
- 'jopf' => 'ð•›',
- 'Jscr' => 'ð’¥',
- 'jscr' => 'ð’¿',
- 'Jsercy' => 'Ј',
- 'jsercy' => 'ј',
- 'Jukcy' => 'Є',
- 'jukcy' => 'Ñ”',
- 'Kappa' => 'Κ',
- 'kappa' => 'κ',
- 'kappav' => 'ϰ',
- 'Kcedil' => 'Ķ',
- 'kcedil' => 'Ä·',
- 'Kcy' => 'К',
- 'kcy' => 'к',
- 'Kfr' => 'ð”Ž',
- 'kfr' => 'ð”¨',
- 'kgreen' => 'ĸ',
- 'KHcy' => 'Ð¥',
- 'khcy' => 'Ñ…',
- 'KJcy' => 'Ќ',
- 'kjcy' => 'ќ',
- 'Kopf' => 'ð•‚',
- 'kopf' => 'ð•œ',
- 'Kscr' => 'ð’¦',
- 'kscr' => 'ð“€',
- 'lAarr' => '⇚',
- 'Lacute' => 'Ĺ',
- 'lacute' => 'ĺ',
- 'laemptyv' => '⦴',
- 'lagran' => 'â„’',
- 'Lambda' => 'Λ',
- 'lambda' => 'λ',
- 'Lang' => '⟪',
- 'lang' => '⟨',
- 'langd' => '⦑',
- 'langle' => '⟨',
- 'lap' => '⪅',
- 'Laplacetrf' => 'â„’',
- 'laquo' => '«',
- 'laqu' => '«',
- 'Larr' => '↞',
- 'lArr' => 'â‡',
- 'larr' => 'â†',
- 'larrb' => '⇤',
- 'larrbfs' => '⤟',
- 'larrfs' => 'â¤',
- 'larrhk' => '↩',
- 'larrlp' => '↫',
- 'larrpl' => '⤹',
- 'larrsim' => '⥳',
- 'larrtl' => '↢',
- 'lat' => '⪫',
- 'lAtail' => '⤛',
- 'latail' => '⤙',
- 'late' => 'âª',
- 'lates' => 'âªï¸€',
- 'lBarr' => '⤎',
- 'lbarr' => '⤌',
- 'lbbrk' => 'â²',
- 'lbrace' => '{',
- 'lbrack' => '[',
- 'lbrke' => '⦋',
- 'lbrksld' => 'â¦',
- 'lbrkslu' => 'â¦',
- 'Lcaron' => 'Ľ',
- 'lcaron' => 'ľ',
- 'Lcedil' => 'Ä»',
- 'lcedil' => 'ļ',
- 'lceil' => '⌈',
- 'lcub' => '{',
- 'Lcy' => 'Л',
- 'lcy' => 'л',
- 'ldca' => '⤶',
- 'ldquo' => '“',
- 'ldquor' => '„',
- 'ldrdhar' => '⥧',
- 'ldrushar' => '⥋',
- 'ldsh' => '↲',
- 'lE' => '≦',
- 'le' => '≤',
- 'LeftAngleBracket' => '⟨',
- 'LeftArrow' => 'â†',
- 'Leftarrow' => 'â‡',
- 'leftarrow' => 'â†',
- 'LeftArrowBar' => '⇤',
- 'LeftArrowRightArrow' => '⇆',
- 'leftarrowtail' => '↢',
- 'LeftCeiling' => '⌈',
- 'LeftDoubleBracket' => '⟦',
- 'LeftDownTeeVector' => '⥡',
- 'LeftDownVector' => '⇃',
- 'LeftDownVectorBar' => '⥙',
- 'LeftFloor' => '⌊',
- 'leftharpoondown' => '↽',
- 'leftharpoonup' => '↼',
- 'leftleftarrows' => '⇇',
- 'LeftRightArrow' => '↔',
- 'Leftrightarrow' => '⇔',
- 'leftrightarrow' => '↔',
- 'leftrightarrows' => '⇆',
- 'leftrightharpoons' => '⇋',
- 'leftrightsquigarrow' => 'â†',
- 'LeftRightVector' => '⥎',
- 'LeftTee' => '⊣',
- 'LeftTeeArrow' => '↤',
- 'LeftTeeVector' => '⥚',
- 'leftthreetimes' => 'â‹‹',
- 'LeftTriangle' => '⊲',
- 'LeftTriangleBar' => 'â§',
- 'LeftTriangleEqual' => '⊴',
- 'LeftUpDownVector' => '⥑',
- 'LeftUpTeeVector' => '⥠',
- 'LeftUpVector' => '↿',
- 'LeftUpVectorBar' => '⥘',
- 'LeftVector' => '↼',
- 'LeftVectorBar' => '⥒',
- 'lEg' => '⪋',
- 'leg' => '⋚',
- 'leq' => '≤',
- 'leqq' => '≦',
- 'leqslant' => '⩽',
- 'les' => '⩽',
- 'lescc' => '⪨',
- 'lesdot' => 'â©¿',
- 'lesdoto' => 'âª',
- 'lesdotor' => '⪃',
- 'lesg' => '⋚︀',
- 'lesges' => '⪓',
- 'lessapprox' => '⪅',
- 'lessdot' => 'â‹–',
- 'lesseqgtr' => '⋚',
- 'lesseqqgtr' => '⪋',
- 'LessEqualGreater' => '⋚',
- 'LessFullEqual' => '≦',
- 'LessGreater' => '≶',
- 'lessgtr' => '≶',
- 'LessLess' => '⪡',
- 'lesssim' => '≲',
- 'LessSlantEqual' => '⩽',
- 'LessTilde' => '≲',
- 'lfisht' => '⥼',
- 'lfloor' => '⌊',
- 'Lfr' => 'ð”',
- 'lfr' => 'ð”©',
- 'lg' => '≶',
- 'lgE' => '⪑',
- 'lHar' => '⥢',
- 'lhard' => '↽',
- 'lharu' => '↼',
- 'lharul' => '⥪',
- 'lhblk' => 'â–„',
- 'LJcy' => 'Љ',
- 'ljcy' => 'Ñ™',
- 'Ll' => '⋘',
- 'll' => '≪',
- 'llarr' => '⇇',
- 'llcorner' => '⌞',
- 'Lleftarrow' => '⇚',
- 'llhard' => '⥫',
- 'lltri' => 'â—º',
- 'Lmidot' => 'Ä¿',
- 'lmidot' => 'Å€',
- 'lmoust' => '⎰',
- 'lmoustache' => '⎰',
- 'lnap' => '⪉',
- 'lnapprox' => '⪉',
- 'lnE' => '≨',
- 'lne' => '⪇',
- 'lneq' => '⪇',
- 'lneqq' => '≨',
- 'lnsim' => '⋦',
- 'loang' => '⟬',
- 'loarr' => '⇽',
- 'lobrk' => '⟦',
- 'LongLeftArrow' => '⟵',
- 'Longleftarrow' => '⟸',
- 'longleftarrow' => '⟵',
- 'LongLeftRightArrow' => '⟷',
- 'Longleftrightarrow' => '⟺',
- 'longleftrightarrow' => '⟷',
- 'longmapsto' => '⟼',
- 'LongRightArrow' => '⟶',
- 'Longrightarrow' => '⟹',
- 'longrightarrow' => '⟶',
- 'looparrowleft' => '↫',
- 'looparrowright' => '↬',
- 'lopar' => '⦅',
- 'Lopf' => 'ð•ƒ',
- 'lopf' => 'ð•',
- 'loplus' => 'â¨',
- 'lotimes' => '⨴',
- 'lowast' => '∗',
- 'lowbar' => '_',
- 'LowerLeftArrow' => '↙',
- 'LowerRightArrow' => '↘',
- 'loz' => 'â—Š',
- 'lozenge' => 'â—Š',
- 'lozf' => 'â§«',
- 'lpar' => '(',
- 'lparlt' => '⦓',
- 'lrarr' => '⇆',
- 'lrcorner' => '⌟',
- 'lrhar' => '⇋',
- 'lrhard' => 'â¥',
- 'lrm' => '‎',
- 'lrtri' => '⊿',
- 'lsaquo' => '‹',
- 'Lscr' => 'â„’',
- 'lscr' => 'ð“',
- 'Lsh' => '↰',
- 'lsh' => '↰',
- 'lsim' => '≲',
- 'lsime' => 'âª',
- 'lsimg' => 'âª',
- 'lsqb' => '[',
- 'lsquo' => '‘',
- 'lsquor' => '‚',
- 'Lstrok' => 'Å',
- 'lstrok' => 'Å‚',
- 'LT' => '<',
- 'L' => '<',
- 'Lt' => '≪',
- 'lt' => '<',
- 'l' => '<',
- 'ltcc' => '⪦',
- 'ltcir' => '⩹',
- 'ltdot' => 'â‹–',
- 'lthree' => 'â‹‹',
- 'ltimes' => '⋉',
- 'ltlarr' => '⥶',
- 'ltquest' => 'â©»',
- 'ltri' => 'â—ƒ',
- 'ltrie' => '⊴',
- 'ltrif' => 'â—‚',
- 'ltrPar' => '⦖',
- 'lurdshar' => '⥊',
- 'luruhar' => '⥦',
- 'lvertneqq' => '≨︀',
- 'lvnE' => '≨︀',
- 'macr' => '¯',
- 'mac' => '¯',
- 'male' => '♂',
- 'malt' => '✠',
- 'maltese' => '✠',
- 'Map' => '⤅',
- 'map' => '↦',
- 'mapsto' => '↦',
- 'mapstodown' => '↧',
- 'mapstoleft' => '↤',
- 'mapstoup' => '↥',
- 'marker' => 'â–®',
- 'mcomma' => '⨩',
- 'Mcy' => 'М',
- 'mcy' => 'м',
- 'mdash' => '—',
- 'mDDot' => '∺',
- 'measuredangle' => '∡',
- 'MediumSpace' => 'âŸ',
- 'Mellintrf' => 'ℳ',
- 'Mfr' => 'ð”',
- 'mfr' => 'ð”ª',
- 'mho' => 'â„§',
- 'micro' => 'µ',
- 'micr' => 'µ',
- 'mid' => '∣',
- 'midast' => '*',
- 'midcir' => 'â«°',
- 'middot' => '·',
- 'middo' => '·',
- 'minus' => '−',
- 'minusb' => '⊟',
- 'minusd' => '∸',
- 'minusdu' => '⨪',
- 'MinusPlus' => '∓',
- 'mlcp' => 'â«›',
- 'mldr' => '…',
- 'mnplus' => '∓',
- 'models' => '⊧',
- 'Mopf' => 'ð•„',
- 'mopf' => 'ð•ž',
- 'mp' => '∓',
- 'Mscr' => 'ℳ',
- 'mscr' => 'ð“‚',
- 'mstpos' => '∾',
- 'Mu' => 'Μ',
- 'mu' => 'μ',
- 'multimap' => '⊸',
- 'mumap' => '⊸',
- 'nabla' => '∇',
- 'Nacute' => 'Ń',
- 'nacute' => 'Å„',
- 'nang' => '∠⃒',
- 'nap' => '≉',
- 'napE' => '⩰̸',
- 'napid' => '≋̸',
- 'napos' => 'ʼn',
- 'napprox' => '≉',
- 'natur' => 'â™®',
- 'natural' => 'â™®',
- 'naturals' => 'â„•',
- 'nbsp' => 'Â ',
- 'nbs' => 'Â ',
- 'nbump' => '≎̸',
- 'nbumpe' => 'â‰Ì¸',
- 'ncap' => '⩃',
- 'Ncaron' => 'Ň',
- 'ncaron' => 'ň',
- 'Ncedil' => 'Å…',
- 'ncedil' => 'ņ',
- 'ncong' => '≇',
- 'ncongdot' => 'â©Ì¸',
- 'ncup' => 'â©‚',
- 'Ncy' => 'Ð',
- 'ncy' => 'н',
- 'ndash' => '–',
- 'ne' => '≠',
- 'nearhk' => '⤤',
- 'neArr' => '⇗',
- 'nearr' => '↗',
- 'nearrow' => '↗',
- 'nedot' => 'â‰Ì¸',
- 'NegativeMediumSpace' => '​',
- 'NegativeThickSpace' => '​',
- 'NegativeThinSpace' => '​',
- 'NegativeVeryThinSpace' => '​',
- 'nequiv' => '≢',
- 'nesear' => '⤨',
- 'nesim' => '≂̸',
- 'NestedGreaterGreater' => '≫',
- 'NestedLessLess' => '≪',
- 'NewLine' => '
-',
- 'nexist' => '∄',
- 'nexists' => '∄',
- 'Nfr' => 'ð”‘',
- 'nfr' => 'ð”«',
- 'ngE' => '≧̸',
- 'nge' => '≱',
- 'ngeq' => '≱',
- 'ngeqq' => '≧̸',
- 'ngeqslant' => '⩾̸',
- 'nges' => '⩾̸',
- 'nGg' => '⋙̸',
- 'ngsim' => '≵',
- 'nGt' => '≫⃒',
- 'ngt' => '≯',
- 'ngtr' => '≯',
- 'nGtv' => '≫̸',
- 'nhArr' => '⇎',
- 'nharr' => '↮',
- 'nhpar' => '⫲',
- 'ni' => '∋',
- 'nis' => '⋼',
- 'nisd' => '⋺',
- 'niv' => '∋',
- 'NJcy' => 'Њ',
- 'njcy' => 'Ñš',
- 'nlArr' => 'â‡',
- 'nlarr' => '↚',
- 'nldr' => '‥',
- 'nlE' => '≦̸',
- 'nle' => '≰',
- 'nLeftarrow' => 'â‡',
- 'nleftarrow' => '↚',
- 'nLeftrightarrow' => '⇎',
- 'nleftrightarrow' => '↮',
- 'nleq' => '≰',
- 'nleqq' => '≦̸',
- 'nleqslant' => '⩽̸',
- 'nles' => '⩽̸',
- 'nless' => '≮',
- 'nLl' => '⋘̸',
- 'nlsim' => '≴',
- 'nLt' => '≪⃒',
- 'nlt' => '≮',
- 'nltri' => '⋪',
- 'nltrie' => '⋬',
- 'nLtv' => '≪̸',
- 'nmid' => '∤',
- 'NoBreak' => 'â ',
- 'NonBreakingSpace' => 'Â ',
- 'Nopf' => 'â„•',
- 'nopf' => 'ð•Ÿ',
- 'Not' => '⫬',
- 'not' => '¬',
- 'no' => '¬',
- 'NotCongruent' => '≢',
- 'NotCupCap' => 'â‰',
- 'NotDoubleVerticalBar' => '∦',
- 'NotElement' => '∉',
- 'NotEqual' => '≠',
- 'NotEqualTilde' => '≂̸',
- 'NotExists' => '∄',
- 'NotGreater' => '≯',
- 'NotGreaterEqual' => '≱',
- 'NotGreaterFullEqual' => '≧̸',
- 'NotGreaterGreater' => '≫̸',
- 'NotGreaterLess' => '≹',
- 'NotGreaterSlantEqual' => '⩾̸',
- 'NotGreaterTilde' => '≵',
- 'NotHumpDownHump' => '≎̸',
- 'NotHumpEqual' => 'â‰Ì¸',
- 'notin' => '∉',
- 'notindot' => '⋵̸',
- 'notinE' => '⋹̸',
- 'notinva' => '∉',
- 'notinvb' => 'â‹·',
- 'notinvc' => 'â‹¶',
- 'NotLeftTriangle' => '⋪',
- 'NotLeftTriangleBar' => 'â§Ì¸',
- 'NotLeftTriangleEqual' => '⋬',
- 'NotLess' => '≮',
- 'NotLessEqual' => '≰',
- 'NotLessGreater' => '≸',
- 'NotLessLess' => '≪̸',
- 'NotLessSlantEqual' => '⩽̸',
- 'NotLessTilde' => '≴',
- 'NotNestedGreaterGreater' => '⪢̸',
- 'NotNestedLessLess' => '⪡̸',
- 'notni' => '∌',
- 'notniva' => '∌',
- 'notnivb' => '⋾',
- 'notnivc' => '⋽',
- 'NotPrecedes' => '⊀',
- 'NotPrecedesEqual' => '⪯̸',
- 'NotPrecedesSlantEqual' => 'â‹ ',
- 'NotReverseElement' => '∌',
- 'NotRightTriangle' => 'â‹«',
- 'NotRightTriangleBar' => 'â§Ì¸',
- 'NotRightTriangleEqual' => 'â‹',
- 'NotSquareSubset' => 'âŠÌ¸',
- 'NotSquareSubsetEqual' => 'â‹¢',
- 'NotSquareSuperset' => 'âŠÌ¸',
- 'NotSquareSupersetEqual' => 'â‹£',
- 'NotSubset' => '⊂⃒',
- 'NotSubsetEqual' => '⊈',
- 'NotSucceeds' => 'âŠ',
- 'NotSucceedsEqual' => '⪰̸',
- 'NotSucceedsSlantEqual' => 'â‹¡',
- 'NotSucceedsTilde' => '≿̸',
- 'NotSuperset' => '⊃⃒',
- 'NotSupersetEqual' => '⊉',
- 'NotTilde' => 'â‰',
- 'NotTildeEqual' => '≄',
- 'NotTildeFullEqual' => '≇',
- 'NotTildeTilde' => '≉',
- 'NotVerticalBar' => '∤',
- 'npar' => '∦',
- 'nparallel' => '∦',
- 'nparsl' => '⫽⃥',
- 'npart' => '∂̸',
- 'npolint' => '⨔',
- 'npr' => '⊀',
- 'nprcue' => 'â‹ ',
- 'npre' => '⪯̸',
- 'nprec' => '⊀',
- 'npreceq' => '⪯̸',
- 'nrArr' => 'â‡',
- 'nrarr' => '↛',
- 'nrarrc' => '⤳̸',
- 'nrarrw' => 'â†Ì¸',
- 'nRightarrow' => 'â‡',
- 'nrightarrow' => '↛',
- 'nrtri' => 'â‹«',
- 'nrtrie' => 'â‹',
- 'nsc' => 'âŠ',
- 'nsccue' => 'â‹¡',
- 'nsce' => '⪰̸',
- 'Nscr' => 'ð’©',
- 'nscr' => 'ð“ƒ',
- 'nshortmid' => '∤',
- 'nshortparallel' => '∦',
- 'nsim' => 'â‰',
- 'nsime' => '≄',
- 'nsimeq' => '≄',
- 'nsmid' => '∤',
- 'nspar' => '∦',
- 'nsqsube' => 'â‹¢',
- 'nsqsupe' => 'â‹£',
- 'nsub' => '⊄',
- 'nsubE' => '⫅̸',
- 'nsube' => '⊈',
- 'nsubset' => '⊂⃒',
- 'nsubseteq' => '⊈',
- 'nsubseteqq' => '⫅̸',
- 'nsucc' => 'âŠ',
- 'nsucceq' => '⪰̸',
- 'nsup' => '⊅',
- 'nsupE' => '⫆̸',
- 'nsupe' => '⊉',
- 'nsupset' => '⊃⃒',
- 'nsupseteq' => '⊉',
- 'nsupseteqq' => '⫆̸',
- 'ntgl' => '≹',
- 'Ntilde' => 'Ñ',
- 'Ntild' => 'Ñ',
- 'ntilde' => 'ñ',
- 'ntild' => 'ñ',
- 'ntlg' => '≸',
- 'ntriangleleft' => '⋪',
- 'ntrianglelefteq' => '⋬',
- 'ntriangleright' => 'â‹«',
- 'ntrianglerighteq' => 'â‹',
- 'Nu' => 'Î',
- 'nu' => 'ν',
- 'num' => '#',
- 'numero' => 'â„–',
- 'numsp' => ' ',
- 'nvap' => 'â‰âƒ’',
- 'nVDash' => '⊯',
- 'nVdash' => '⊮',
- 'nvDash' => 'âŠ',
- 'nvdash' => '⊬',
- 'nvge' => '≥⃒',
- 'nvgt' => '>⃒',
- 'nvHarr' => '⤄',
- 'nvinfin' => 'â§ž',
- 'nvlArr' => '⤂',
- 'nvle' => '≤⃒',
- 'nvlt' => '<⃒',
- 'nvltrie' => '⊴⃒',
- 'nvrArr' => '⤃',
- 'nvrtrie' => '⊵⃒',
- 'nvsim' => '∼⃒',
- 'nwarhk' => '⤣',
- 'nwArr' => '⇖',
- 'nwarr' => '↖',
- 'nwarrow' => '↖',
- 'nwnear' => '⤧',
- 'Oacute' => 'Ó',
- 'Oacut' => 'Ó',
- 'oacute' => 'ó',
- 'oacut' => 'ó',
- 'oast' => '⊛',
- 'ocir' => 'ô',
- 'Ocirc' => 'Ô',
- 'Ocir' => 'Ô',
- 'ocirc' => 'ô',
- 'Ocy' => 'О',
- 'ocy' => 'о',
- 'odash' => 'âŠ',
- 'Odblac' => 'Å',
- 'odblac' => 'Å‘',
- 'odiv' => '⨸',
- 'odot' => '⊙',
- 'odsold' => '⦼',
- 'OElig' => 'Å’',
- 'oelig' => 'Å“',
- 'ofcir' => '⦿',
- 'Ofr' => 'ð”’',
- 'ofr' => 'ð”¬',
- 'ogon' => 'Ë›',
- 'Ograve' => 'Ã’',
- 'Ograv' => 'Ã’',
- 'ograve' => 'ò',
- 'ograv' => 'ò',
- 'ogt' => 'â§',
- 'ohbar' => '⦵',
- 'ohm' => 'Ω',
- 'oint' => '∮',
- 'olarr' => '↺',
- 'olcir' => '⦾',
- 'olcross' => '⦻',
- 'oline' => '‾',
- 'olt' => 'â§€',
- 'Omacr' => 'Ō',
- 'omacr' => 'Å',
- 'Omega' => 'Ω',
- 'omega' => 'ω',
- 'Omicron' => 'Ο',
- 'omicron' => 'ο',
- 'omid' => '⦶',
- 'ominus' => '⊖',
- 'Oopf' => 'ð•†',
- 'oopf' => 'ð• ',
- 'opar' => '⦷',
- 'OpenCurlyDoubleQuote' => '“',
- 'OpenCurlyQuote' => '‘',
- 'operp' => '⦹',
- 'oplus' => '⊕',
- 'Or' => 'â©”',
- 'or' => '∨',
- 'orarr' => '↻',
- 'ord' => 'º',
- 'order' => 'â„´',
- 'orderof' => 'â„´',
- 'ordf' => 'ª',
- 'ordm' => 'º',
- 'origof' => '⊶',
- 'oror' => 'â©–',
- 'orslope' => 'â©—',
- 'orv' => 'â©›',
- 'oS' => 'Ⓢ',
- 'Oscr' => 'ð’ª',
- 'oscr' => 'â„´',
- 'Oslash' => 'Ø',
- 'Oslas' => 'Ø',
- 'oslash' => 'ø',
- 'oslas' => 'ø',
- 'osol' => '⊘',
- 'Otilde' => 'Õ',
- 'Otild' => 'Õ',
- 'otilde' => 'õ',
- 'otild' => 'õ',
- 'Otimes' => '⨷',
- 'otimes' => '⊗',
- 'otimesas' => '⨶',
- 'Ouml' => 'Ö',
- 'Oum' => 'Ö',
- 'ouml' => 'ö',
- 'oum' => 'ö',
- 'ovbar' => '⌽',
- 'OverBar' => '‾',
- 'OverBrace' => 'âž',
- 'OverBracket' => '⎴',
- 'OverParenthesis' => 'âœ',
- 'par' => '¶',
- 'para' => '¶',
- 'parallel' => '∥',
- 'parsim' => '⫳',
- 'parsl' => '⫽',
- 'part' => '∂',
- 'PartialD' => '∂',
- 'Pcy' => 'П',
- 'pcy' => 'п',
- 'percnt' => '%',
- 'period' => '.',
- 'permil' => '‰',
- 'perp' => '⊥',
- 'pertenk' => '‱',
- 'Pfr' => 'ð”“',
- 'pfr' => 'ð”',
- 'Phi' => 'Φ',
- 'phi' => 'φ',
- 'phiv' => 'Ï•',
- 'phmmat' => 'ℳ',
- 'phone' => '☎',
- 'Pi' => 'Î ',
- 'pi' => 'Ï€',
- 'pitchfork' => 'â‹”',
- 'piv' => 'Ï–',
- 'planck' => 'â„',
- 'planckh' => 'ℎ',
- 'plankv' => 'â„',
- 'plus' => '+',
- 'plusacir' => '⨣',
- 'plusb' => '⊞',
- 'pluscir' => '⨢',
- 'plusdo' => '∔',
- 'plusdu' => '⨥',
- 'pluse' => '⩲',
- 'PlusMinus' => '±',
- 'plusmn' => '±',
- 'plusm' => '±',
- 'plussim' => '⨦',
- 'plustwo' => '⨧',
- 'pm' => '±',
- 'Poincareplane' => 'ℌ',
- 'pointint' => '⨕',
- 'Popf' => 'â„™',
- 'popf' => 'ð•¡',
- 'pound' => '£',
- 'poun' => '£',
- 'Pr' => '⪻',
- 'pr' => '≺',
- 'prap' => '⪷',
- 'prcue' => '≼',
- 'prE' => '⪳',
- 'pre' => '⪯',
- 'prec' => '≺',
- 'precapprox' => '⪷',
- 'preccurlyeq' => '≼',
- 'Precedes' => '≺',
- 'PrecedesEqual' => '⪯',
- 'PrecedesSlantEqual' => '≼',
- 'PrecedesTilde' => '≾',
- 'preceq' => '⪯',
- 'precnapprox' => '⪹',
- 'precneqq' => '⪵',
- 'precnsim' => '⋨',
- 'precsim' => '≾',
- 'Prime' => '″',
- 'prime' => '′',
- 'primes' => 'â„™',
- 'prnap' => '⪹',
- 'prnE' => '⪵',
- 'prnsim' => '⋨',
- 'prod' => 'âˆ',
- 'Product' => 'âˆ',
- 'profalar' => '⌮',
- 'profline' => '⌒',
- 'profsurf' => '⌓',
- 'prop' => 'âˆ',
- 'Proportion' => '∷',
- 'Proportional' => 'âˆ',
- 'propto' => 'âˆ',
- 'prsim' => '≾',
- 'prurel' => '⊰',
- 'Pscr' => 'ð’«',
- 'pscr' => 'ð“…',
- 'Psi' => 'Ψ',
- 'psi' => 'ψ',
- 'puncsp' => ' ',
- 'Qfr' => 'ð””',
- 'qfr' => 'ð”®',
- 'qint' => '⨌',
- 'Qopf' => 'ℚ',
- 'qopf' => 'ð•¢',
- 'qprime' => 'â—',
- 'Qscr' => 'ð’¬',
- 'qscr' => 'ð“†',
- 'quaternions' => 'â„',
- 'quatint' => '⨖',
- 'quest' => '?',
- 'questeq' => '≟',
- 'QUOT' => '"',
- 'QUO' => '"',
- 'quot' => '"',
- 'quo' => '"',
- 'rAarr' => '⇛',
- 'race' => '∽̱',
- 'Racute' => 'Å”',
- 'racute' => 'Å•',
- 'radic' => '√',
- 'raemptyv' => '⦳',
- 'Rang' => '⟫',
- 'rang' => '⟩',
- 'rangd' => '⦒',
- 'range' => '⦥',
- 'rangle' => '⟩',
- 'raquo' => '»',
- 'raqu' => '»',
- 'Rarr' => '↠',
- 'rArr' => '⇒',
- 'rarr' => '→',
- 'rarrap' => '⥵',
- 'rarrb' => '⇥',
- 'rarrbfs' => '⤠',
- 'rarrc' => '⤳',
- 'rarrfs' => '⤞',
- 'rarrhk' => '↪',
- 'rarrlp' => '↬',
- 'rarrpl' => '⥅',
- 'rarrsim' => '⥴',
- 'Rarrtl' => '⤖',
- 'rarrtl' => '↣',
- 'rarrw' => 'â†',
- 'rAtail' => '⤜',
- 'ratail' => '⤚',
- 'ratio' => '∶',
- 'rationals' => 'ℚ',
- 'RBarr' => 'â¤',
- 'rBarr' => 'â¤',
- 'rbarr' => 'â¤',
- 'rbbrk' => 'â³',
- 'rbrace' => '}',
- 'rbrack' => ']',
- 'rbrke' => '⦌',
- 'rbrksld' => '⦎',
- 'rbrkslu' => 'â¦',
- 'Rcaron' => 'Ř',
- 'rcaron' => 'Å™',
- 'Rcedil' => 'Å–',
- 'rcedil' => 'Å—',
- 'rceil' => '⌉',
- 'rcub' => '}',
- 'Rcy' => 'Ð ',
- 'rcy' => 'Ñ€',
- 'rdca' => '⤷',
- 'rdldhar' => '⥩',
- 'rdquo' => 'â€',
- 'rdquor' => 'â€',
- 'rdsh' => '↳',
- 'Re' => 'ℜ',
- 'real' => 'ℜ',
- 'realine' => 'â„›',
- 'realpart' => 'ℜ',
- 'reals' => 'â„',
- 'rect' => 'â–',
- 'REG' => '®',
- 'RE' => '®',
- 'reg' => '®',
- 're' => '®',
- 'ReverseElement' => '∋',
- 'ReverseEquilibrium' => '⇋',
- 'ReverseUpEquilibrium' => '⥯',
- 'rfisht' => '⥽',
- 'rfloor' => '⌋',
- 'Rfr' => 'ℜ',
- 'rfr' => 'ð”¯',
- 'rHar' => '⥤',
- 'rhard' => 'â‡',
- 'rharu' => '⇀',
- 'rharul' => '⥬',
- 'Rho' => 'Ρ',
- 'rho' => 'Ï',
- 'rhov' => 'ϱ',
- 'RightAngleBracket' => '⟩',
- 'RightArrow' => '→',
- 'Rightarrow' => '⇒',
- 'rightarrow' => '→',
- 'RightArrowBar' => '⇥',
- 'RightArrowLeftArrow' => '⇄',
- 'rightarrowtail' => '↣',
- 'RightCeiling' => '⌉',
- 'RightDoubleBracket' => '⟧',
- 'RightDownTeeVector' => 'â¥',
- 'RightDownVector' => '⇂',
- 'RightDownVectorBar' => '⥕',
- 'RightFloor' => '⌋',
- 'rightharpoondown' => 'â‡',
- 'rightharpoonup' => '⇀',
- 'rightleftarrows' => '⇄',
- 'rightleftharpoons' => '⇌',
- 'rightrightarrows' => '⇉',
- 'rightsquigarrow' => 'â†',
- 'RightTee' => '⊢',
- 'RightTeeArrow' => '↦',
- 'RightTeeVector' => '⥛',
- 'rightthreetimes' => '⋌',
- 'RightTriangle' => '⊳',
- 'RightTriangleBar' => 'â§',
- 'RightTriangleEqual' => '⊵',
- 'RightUpDownVector' => 'â¥',
- 'RightUpTeeVector' => '⥜',
- 'RightUpVector' => '↾',
- 'RightUpVectorBar' => '⥔',
- 'RightVector' => '⇀',
- 'RightVectorBar' => '⥓',
- 'ring' => 'Ëš',
- 'risingdotseq' => '≓',
- 'rlarr' => '⇄',
- 'rlhar' => '⇌',
- 'rlm' => 'â€',
- 'rmoust' => '⎱',
- 'rmoustache' => '⎱',
- 'rnmid' => 'â«®',
- 'roang' => 'âŸ',
- 'roarr' => '⇾',
- 'robrk' => '⟧',
- 'ropar' => '⦆',
- 'Ropf' => 'â„',
- 'ropf' => 'ð•£',
- 'roplus' => '⨮',
- 'rotimes' => '⨵',
- 'RoundImplies' => '⥰',
- 'rpar' => ')',
- 'rpargt' => '⦔',
- 'rppolint' => '⨒',
- 'rrarr' => '⇉',
- 'Rrightarrow' => '⇛',
- 'rsaquo' => '›',
- 'Rscr' => 'â„›',
- 'rscr' => 'ð“‡',
- 'Rsh' => '↱',
- 'rsh' => '↱',
- 'rsqb' => ']',
- 'rsquo' => '’',
- 'rsquor' => '’',
- 'rthree' => '⋌',
- 'rtimes' => '⋊',
- 'rtri' => 'â–¹',
- 'rtrie' => '⊵',
- 'rtrif' => 'â–¸',
- 'rtriltri' => 'â§Ž',
- 'RuleDelayed' => 'â§´',
- 'ruluhar' => '⥨',
- 'rx' => '℞',
- 'Sacute' => 'Åš',
- 'sacute' => 'Å›',
- 'sbquo' => '‚',
- 'Sc' => '⪼',
- 'sc' => '≻',
- 'scap' => '⪸',
- 'Scaron' => 'Å ',
- 'scaron' => 'Å¡',
- 'sccue' => '≽',
- 'scE' => '⪴',
- 'sce' => '⪰',
- 'Scedil' => 'Åž',
- 'scedil' => 'ÅŸ',
- 'Scirc' => 'Ŝ',
- 'scirc' => 'Å',
- 'scnap' => '⪺',
- 'scnE' => '⪶',
- 'scnsim' => 'â‹©',
- 'scpolint' => '⨓',
- 'scsim' => '≿',
- 'Scy' => 'С',
- 'scy' => 'Ñ',
- 'sdot' => 'â‹…',
- 'sdotb' => '⊡',
- 'sdote' => '⩦',
- 'searhk' => '⤥',
- 'seArr' => '⇘',
- 'searr' => '↘',
- 'searrow' => '↘',
- 'sect' => '§',
- 'sec' => '§',
- 'semi' => ';',
- 'seswar' => '⤩',
- 'setminus' => '∖',
- 'setmn' => '∖',
- 'sext' => '✶',
- 'Sfr' => 'ð”–',
- 'sfr' => 'ð”°',
- 'sfrown' => '⌢',
- 'sharp' => '♯',
- 'SHCHcy' => 'Щ',
- 'shchcy' => 'щ',
- 'SHcy' => 'Ш',
- 'shcy' => 'ш',
- 'ShortDownArrow' => '↓',
- 'ShortLeftArrow' => 'â†',
- 'shortmid' => '∣',
- 'shortparallel' => '∥',
- 'ShortRightArrow' => '→',
- 'ShortUpArrow' => '↑',
- 'shy' => 'Â',
- 'sh' => 'Â',
- 'Sigma' => 'Σ',
- 'sigma' => 'σ',
- 'sigmaf' => 'Ï‚',
- 'sigmav' => 'Ï‚',
- 'sim' => '∼',
- 'simdot' => '⩪',
- 'sime' => '≃',
- 'simeq' => '≃',
- 'simg' => '⪞',
- 'simgE' => '⪠',
- 'siml' => 'âª',
- 'simlE' => '⪟',
- 'simne' => '≆',
- 'simplus' => '⨤',
- 'simrarr' => '⥲',
- 'slarr' => 'â†',
- 'SmallCircle' => '∘',
- 'smallsetminus' => '∖',
- 'smashp' => '⨳',
- 'smeparsl' => '⧤',
- 'smid' => '∣',
- 'smile' => '⌣',
- 'smt' => '⪪',
- 'smte' => '⪬',
- 'smtes' => '⪬︀',
- 'SOFTcy' => 'Ь',
- 'softcy' => 'ь',
- 'sol' => '/',
- 'solb' => 'â§„',
- 'solbar' => '⌿',
- 'Sopf' => 'ð•Š',
- 'sopf' => 'ð•¤',
- 'spades' => 'â™ ',
- 'spadesuit' => 'â™ ',
- 'spar' => '∥',
- 'sqcap' => '⊓',
- 'sqcaps' => '⊓︀',
- 'sqcup' => '⊔',
- 'sqcups' => '⊔︀',
- 'Sqrt' => '√',
- 'sqsub' => 'âŠ',
- 'sqsube' => '⊑',
- 'sqsubset' => 'âŠ',
- 'sqsubseteq' => '⊑',
- 'sqsup' => 'âŠ',
- 'sqsupe' => '⊒',
- 'sqsupset' => 'âŠ',
- 'sqsupseteq' => '⊒',
- 'squ' => 'â–¡',
- 'Square' => 'â–¡',
- 'square' => 'â–¡',
- 'SquareIntersection' => '⊓',
- 'SquareSubset' => 'âŠ',
- 'SquareSubsetEqual' => '⊑',
- 'SquareSuperset' => 'âŠ',
- 'SquareSupersetEqual' => '⊒',
- 'SquareUnion' => '⊔',
- 'squarf' => 'â–ª',
- 'squf' => 'â–ª',
- 'srarr' => '→',
- 'Sscr' => 'ð’®',
- 'sscr' => 'ð“ˆ',
- 'ssetmn' => '∖',
- 'ssmile' => '⌣',
- 'sstarf' => '⋆',
- 'Star' => '⋆',
- 'star' => '☆',
- 'starf' => '★',
- 'straightepsilon' => 'ϵ',
- 'straightphi' => 'Ï•',
- 'strns' => '¯',
- 'Sub' => 'â‹',
- 'sub' => '⊂',
- 'subdot' => '⪽',
- 'subE' => 'â«…',
- 'sube' => '⊆',
- 'subedot' => '⫃',
- 'submult' => 'â«',
- 'subnE' => 'â«‹',
- 'subne' => '⊊',
- 'subplus' => '⪿',
- 'subrarr' => '⥹',
- 'Subset' => 'â‹',
- 'subset' => '⊂',
- 'subseteq' => '⊆',
- 'subseteqq' => 'â«…',
- 'SubsetEqual' => '⊆',
- 'subsetneq' => '⊊',
- 'subsetneqq' => 'â«‹',
- 'subsim' => '⫇',
- 'subsub' => 'â«•',
- 'subsup' => 'â«“',
- 'succ' => '≻',
- 'succapprox' => '⪸',
- 'succcurlyeq' => '≽',
- 'Succeeds' => '≻',
- 'SucceedsEqual' => '⪰',
- 'SucceedsSlantEqual' => '≽',
- 'SucceedsTilde' => '≿',
- 'succeq' => '⪰',
- 'succnapprox' => '⪺',
- 'succneqq' => '⪶',
- 'succnsim' => 'â‹©',
- 'succsim' => '≿',
- 'SuchThat' => '∋',
- 'Sum' => '∑',
- 'sum' => '∑',
- 'sung' => '♪',
- 'Sup' => 'â‹‘',
- 'sup' => '³',
- 'sup1' => '¹',
- 'sup2' => '²',
- 'sup3' => '³',
- 'supdot' => '⪾',
- 'supdsub' => '⫘',
- 'supE' => '⫆',
- 'supe' => '⊇',
- 'supedot' => 'â«„',
- 'Superset' => '⊃',
- 'SupersetEqual' => '⊇',
- 'suphsol' => '⟉',
- 'suphsub' => 'â«—',
- 'suplarr' => '⥻',
- 'supmult' => 'â«‚',
- 'supnE' => '⫌',
- 'supne' => '⊋',
- 'supplus' => 'â«€',
- 'Supset' => 'â‹‘',
- 'supset' => '⊃',
- 'supseteq' => '⊇',
- 'supseteqq' => '⫆',
- 'supsetneq' => '⊋',
- 'supsetneqq' => '⫌',
- 'supsim' => '⫈',
- 'supsub' => 'â«”',
- 'supsup' => 'â«–',
- 'swarhk' => '⤦',
- 'swArr' => '⇙',
- 'swarr' => '↙',
- 'swarrow' => '↙',
- 'swnwar' => '⤪',
- 'szlig' => 'ß',
- 'szli' => 'ß',
- 'Tab' => ' ',
- 'target' => '⌖',
- 'Tau' => 'Τ',
- 'tau' => 'Ï„',
- 'tbrk' => '⎴',
- 'Tcaron' => 'Ť',
- 'tcaron' => 'Å¥',
- 'Tcedil' => 'Å¢',
- 'tcedil' => 'Å£',
- 'Tcy' => 'Т',
- 'tcy' => 'Ñ‚',
- 'tdot' => '⃛',
- 'telrec' => '⌕',
- 'Tfr' => 'ð”—',
- 'tfr' => 'ð”±',
- 'there4' => '∴',
- 'Therefore' => '∴',
- 'therefore' => '∴',
- 'Theta' => 'Θ',
- 'theta' => 'θ',
- 'thetasym' => 'Ï‘',
- 'thetav' => 'Ï‘',
- 'thickapprox' => '≈',
- 'thicksim' => '∼',
- 'ThickSpace' => 'âŸâ€Š',
- 'thinsp' => ' ',
- 'ThinSpace' => ' ',
- 'thkap' => '≈',
- 'thksim' => '∼',
- 'THORN' => 'Þ',
- 'THOR' => 'Þ',
- 'thorn' => 'þ',
- 'thor' => 'þ',
- 'Tilde' => '∼',
- 'tilde' => '˜',
- 'TildeEqual' => '≃',
- 'TildeFullEqual' => '≅',
- 'TildeTilde' => '≈',
- 'times' => '×',
- 'time' => '×',
- 'timesb' => '⊠',
- 'timesbar' => '⨱',
- 'timesd' => '⨰',
- 'tint' => 'âˆ',
- 'toea' => '⤨',
- 'top' => '⊤',
- 'topbot' => '⌶',
- 'topcir' => '⫱',
- 'Topf' => 'ð•‹',
- 'topf' => 'ð•¥',
- 'topfork' => '⫚',
- 'tosa' => '⤩',
- 'tprime' => '‴',
- 'TRADE' => 'â„¢',
- 'trade' => 'â„¢',
- 'triangle' => 'â–µ',
- 'triangledown' => 'â–¿',
- 'triangleleft' => 'â—ƒ',
- 'trianglelefteq' => '⊴',
- 'triangleq' => '≜',
- 'triangleright' => 'â–¹',
- 'trianglerighteq' => '⊵',
- 'tridot' => 'â—¬',
- 'trie' => '≜',
- 'triminus' => '⨺',
- 'TripleDot' => '⃛',
- 'triplus' => '⨹',
- 'trisb' => 'â§',
- 'tritime' => '⨻',
- 'trpezium' => 'â¢',
- 'Tscr' => 'ð’¯',
- 'tscr' => 'ð“‰',
- 'TScy' => 'Ц',
- 'tscy' => 'ц',
- 'TSHcy' => 'Ћ',
- 'tshcy' => 'Ñ›',
- 'Tstrok' => 'Ŧ',
- 'tstrok' => 'ŧ',
- 'twixt' => '≬',
- 'twoheadleftarrow' => '↞',
- 'twoheadrightarrow' => '↠',
- 'Uacute' => 'Ú',
- 'Uacut' => 'Ú',
- 'uacute' => 'ú',
- 'uacut' => 'ú',
- 'Uarr' => '↟',
- 'uArr' => '⇑',
- 'uarr' => '↑',
- 'Uarrocir' => '⥉',
- 'Ubrcy' => 'ÐŽ',
- 'ubrcy' => 'Ñž',
- 'Ubreve' => 'Ŭ',
- 'ubreve' => 'Å',
- 'Ucirc' => 'Û',
- 'Ucir' => 'Û',
- 'ucirc' => 'û',
- 'ucir' => 'û',
- 'Ucy' => 'У',
- 'ucy' => 'у',
- 'udarr' => '⇅',
- 'Udblac' => 'Ű',
- 'udblac' => 'ű',
- 'udhar' => '⥮',
- 'ufisht' => '⥾',
- 'Ufr' => 'ð”˜',
- 'ufr' => 'ð”²',
- 'Ugrave' => 'Ù',
- 'Ugrav' => 'Ù',
- 'ugrave' => 'ù',
- 'ugrav' => 'ù',
- 'uHar' => '⥣',
- 'uharl' => '↿',
- 'uharr' => '↾',
- 'uhblk' => 'â–€',
- 'ulcorn' => '⌜',
- 'ulcorner' => '⌜',
- 'ulcrop' => 'âŒ',
- 'ultri' => 'â—¸',
- 'Umacr' => 'Ū',
- 'umacr' => 'Å«',
- 'uml' => '¨',
- 'um' => '¨',
- 'UnderBar' => '_',
- 'UnderBrace' => 'âŸ',
- 'UnderBracket' => '⎵',
- 'UnderParenthesis' => 'â',
- 'Union' => '⋃',
- 'UnionPlus' => '⊎',
- 'Uogon' => 'Ų',
- 'uogon' => 'ų',
- 'Uopf' => 'ð•Œ',
- 'uopf' => 'ð•¦',
- 'UpArrow' => '↑',
- 'Uparrow' => '⇑',
- 'uparrow' => '↑',
- 'UpArrowBar' => '⤒',
- 'UpArrowDownArrow' => '⇅',
- 'UpDownArrow' => '↕',
- 'Updownarrow' => '⇕',
- 'updownarrow' => '↕',
- 'UpEquilibrium' => '⥮',
- 'upharpoonleft' => '↿',
- 'upharpoonright' => '↾',
- 'uplus' => '⊎',
- 'UpperLeftArrow' => '↖',
- 'UpperRightArrow' => '↗',
- 'Upsi' => 'Ï’',
- 'upsi' => 'Ï…',
- 'upsih' => 'Ï’',
- 'Upsilon' => 'Î¥',
- 'upsilon' => 'Ï…',
- 'UpTee' => '⊥',
- 'UpTeeArrow' => '↥',
- 'upuparrows' => '⇈',
- 'urcorn' => 'âŒ',
- 'urcorner' => 'âŒ',
- 'urcrop' => '⌎',
- 'Uring' => 'Å®',
- 'uring' => 'ů',
- 'urtri' => 'â—¹',
- 'Uscr' => 'ð’°',
- 'uscr' => 'ð“Š',
- 'utdot' => 'â‹°',
- 'Utilde' => 'Ũ',
- 'utilde' => 'Å©',
- 'utri' => 'â–µ',
- 'utrif' => 'â–´',
- 'uuarr' => '⇈',
- 'Uuml' => 'Ü',
- 'Uum' => 'Ü',
- 'uuml' => 'ü',
- 'uum' => 'ü',
- 'uwangle' => '⦧',
- 'vangrt' => '⦜',
- 'varepsilon' => 'ϵ',
- 'varkappa' => 'ϰ',
- 'varnothing' => '∅',
- 'varphi' => 'Ï•',
- 'varpi' => 'Ï–',
- 'varpropto' => 'âˆ',
- 'vArr' => '⇕',
- 'varr' => '↕',
- 'varrho' => 'ϱ',
- 'varsigma' => 'Ï‚',
- 'varsubsetneq' => '⊊︀',
- 'varsubsetneqq' => '⫋︀',
- 'varsupsetneq' => '⊋︀',
- 'varsupsetneqq' => '⫌︀',
- 'vartheta' => 'Ï‘',
- 'vartriangleleft' => '⊲',
- 'vartriangleright' => '⊳',
- 'Vbar' => 'â««',
- 'vBar' => '⫨',
- 'vBarv' => 'â«©',
- 'Vcy' => 'Ð’',
- 'vcy' => 'в',
- 'VDash' => '⊫',
- 'Vdash' => '⊩',
- 'vDash' => '⊨',
- 'vdash' => '⊢',
- 'Vdashl' => '⫦',
- 'Vee' => 'â‹',
- 'vee' => '∨',
- 'veebar' => '⊻',
- 'veeeq' => '≚',
- 'vellip' => 'â‹®',
- 'Verbar' => '‖',
- 'verbar' => '|',
- 'Vert' => '‖',
- 'vert' => '|',
- 'VerticalBar' => '∣',
- 'VerticalLine' => '|',
- 'VerticalSeparator' => 'â˜',
- 'VerticalTilde' => '≀',
- 'VeryThinSpace' => ' ',
- 'Vfr' => 'ð”™',
- 'vfr' => 'ð”³',
- 'vltri' => '⊲',
- 'vnsub' => '⊂⃒',
- 'vnsup' => '⊃⃒',
- 'Vopf' => 'ð•',
- 'vopf' => 'ð•§',
- 'vprop' => 'âˆ',
- 'vrtri' => '⊳',
- 'Vscr' => 'ð’±',
- 'vscr' => 'ð“‹',
- 'vsubnE' => '⫋︀',
- 'vsubne' => '⊊︀',
- 'vsupnE' => '⫌︀',
- 'vsupne' => '⊋︀',
- 'Vvdash' => '⊪',
- 'vzigzag' => '⦚',
- 'Wcirc' => 'Å´',
- 'wcirc' => 'ŵ',
- 'wedbar' => '⩟',
- 'Wedge' => 'â‹€',
- 'wedge' => '∧',
- 'wedgeq' => '≙',
- 'weierp' => '℘',
- 'Wfr' => 'ð”š',
- 'wfr' => 'ð”´',
- 'Wopf' => 'ð•Ž',
- 'wopf' => 'ð•¨',
- 'wp' => '℘',
- 'wr' => '≀',
- 'wreath' => '≀',
- 'Wscr' => 'ð’²',
- 'wscr' => 'ð“Œ',
- 'xcap' => 'â‹‚',
- 'xcirc' => 'â—¯',
- 'xcup' => '⋃',
- 'xdtri' => 'â–½',
- 'Xfr' => 'ð”›',
- 'xfr' => 'ð”µ',
- 'xhArr' => '⟺',
- 'xharr' => '⟷',
- 'Xi' => 'Ξ',
- 'xi' => 'ξ',
- 'xlArr' => '⟸',
- 'xlarr' => '⟵',
- 'xmap' => '⟼',
- 'xnis' => 'â‹»',
- 'xodot' => '⨀',
- 'Xopf' => 'ð•',
- 'xopf' => 'ð•©',
- 'xoplus' => 'â¨',
- 'xotime' => '⨂',
- 'xrArr' => '⟹',
- 'xrarr' => '⟶',
- 'Xscr' => 'ð’³',
- 'xscr' => 'ð“',
- 'xsqcup' => '⨆',
- 'xuplus' => '⨄',
- 'xutri' => 'â–³',
- 'xvee' => 'â‹',
- 'xwedge' => 'â‹€',
- 'Yacute' => 'Ã',
- 'Yacut' => 'Ã',
- 'yacute' => 'ý',
- 'yacut' => 'ý',
- 'YAcy' => 'Я',
- 'yacy' => 'Ñ',
- 'Ycirc' => 'Ŷ',
- 'ycirc' => 'Å·',
- 'Ycy' => 'Ы',
- 'ycy' => 'Ñ‹',
- 'yen' => 'Â¥',
- 'ye' => 'Â¥',
- 'Yfr' => 'ð”œ',
- 'yfr' => 'ð”¶',
- 'YIcy' => 'Ї',
- 'yicy' => 'Ñ—',
- 'Yopf' => 'ð•',
- 'yopf' => 'ð•ª',
- 'Yscr' => 'ð’´',
- 'yscr' => 'ð“Ž',
- 'YUcy' => 'Ю',
- 'yucy' => 'ÑŽ',
- 'Yuml' => 'Ÿ',
- 'yuml' => 'ÿ',
- 'yum' => 'ÿ',
- 'Zacute' => 'Ź',
- 'zacute' => 'ź',
- 'Zcaron' => 'Ž',
- 'zcaron' => 'ž',
- 'Zcy' => 'З',
- 'zcy' => 'з',
- 'Zdot' => 'Å»',
- 'zdot' => 'ż',
- 'zeetrf' => 'ℨ',
- 'ZeroWidthSpace' => '​',
- 'Zeta' => 'Ζ',
- 'zeta' => 'ζ',
- 'Zfr' => 'ℨ',
- 'zfr' => 'ð”·',
- 'ZHcy' => 'Ж',
- 'zhcy' => 'ж',
- 'zigrarr' => 'â‡',
- 'Zopf' => 'ℤ',
- 'zopf' => 'ð•«',
- 'Zscr' => 'ð’µ',
- 'zscr' => 'ð“',
- 'zwj' => 'â€',
- 'zwnj' => '‌',
- );
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/masterminds/html5/src/HTML5/Exception.php b/fixtures/symfony_5_local_deps/vendor/masterminds/html5/src/HTML5/Exception.php
deleted file mode 100644
index 64e97e6ff..000000000
--- a/fixtures/symfony_5_local_deps/vendor/masterminds/html5/src/HTML5/Exception.php
+++ /dev/null
@@ -1,10 +0,0 @@
- self::NAMESPACE_HTML,
- 'svg' => self::NAMESPACE_SVG,
- 'math' => self::NAMESPACE_MATHML,
- );
-
- /**
- * Holds the always available namespaces (which does not require the XMLNS declaration).
- *
- * @var array
- */
- protected $implicitNamespaces = array(
- 'xml' => self::NAMESPACE_XML,
- 'xmlns' => self::NAMESPACE_XMLNS,
- 'xlink' => self::NAMESPACE_XLINK,
- );
-
- /**
- * Holds a stack of currently active namespaces.
- *
- * @var array
- */
- protected $nsStack = array();
-
- /**
- * Holds the number of namespaces declared by a node.
- *
- * @var array
- */
- protected $pushes = array();
-
- /**
- * Defined in 8.2.5.
- */
- const IM_INITIAL = 0;
-
- const IM_BEFORE_HTML = 1;
-
- const IM_BEFORE_HEAD = 2;
-
- const IM_IN_HEAD = 3;
-
- const IM_IN_HEAD_NOSCRIPT = 4;
-
- const IM_AFTER_HEAD = 5;
-
- const IM_IN_BODY = 6;
-
- const IM_TEXT = 7;
-
- const IM_IN_TABLE = 8;
-
- const IM_IN_TABLE_TEXT = 9;
-
- const IM_IN_CAPTION = 10;
-
- const IM_IN_COLUMN_GROUP = 11;
-
- const IM_IN_TABLE_BODY = 12;
-
- const IM_IN_ROW = 13;
-
- const IM_IN_CELL = 14;
-
- const IM_IN_SELECT = 15;
-
- const IM_IN_SELECT_IN_TABLE = 16;
-
- const IM_AFTER_BODY = 17;
-
- const IM_IN_FRAMESET = 18;
-
- const IM_AFTER_FRAMESET = 19;
-
- const IM_AFTER_AFTER_BODY = 20;
-
- const IM_AFTER_AFTER_FRAMESET = 21;
-
- const IM_IN_SVG = 22;
-
- const IM_IN_MATHML = 23;
-
- protected $options = array();
-
- protected $stack = array();
-
- protected $current; // Pointer in the tag hierarchy.
- protected $rules;
- protected $doc;
-
- protected $frag;
-
- protected $processor;
-
- protected $insertMode = 0;
-
- /**
- * Track if we are in an element that allows only inline child nodes.
- *
- * @var string|null
- */
- protected $onlyInline;
-
- /**
- * Quirks mode is enabled by default.
- * Any document that is missing the DT will be considered to be in quirks mode.
- */
- protected $quirks = true;
-
- protected $errors = array();
-
- public function __construct($isFragment = false, array $options = array())
- {
- $this->options = $options;
-
- if (isset($options[self::OPT_TARGET_DOC])) {
- $this->doc = $options[self::OPT_TARGET_DOC];
- } else {
- $impl = new \DOMImplementation();
- // XXX:
- // Create the doctype. For now, we are always creating HTML5
- // documents, and attempting to up-convert any older DTDs to HTML5.
- $dt = $impl->createDocumentType('html');
- // $this->doc = \DOMImplementation::createDocument(NULL, 'html', $dt);
- $this->doc = $impl->createDocument(null, '', $dt);
- $this->doc->encoding = !empty($options['encoding']) ? $options['encoding'] : 'UTF-8';
- }
-
- $this->errors = array();
-
- $this->current = $this->doc; // ->documentElement;
-
- // Create a rules engine for tags.
- $this->rules = new TreeBuildingRules();
-
- $implicitNS = array();
- if (isset($this->options[self::OPT_IMPLICIT_NS])) {
- $implicitNS = $this->options[self::OPT_IMPLICIT_NS];
- } elseif (isset($this->options['implicitNamespaces'])) {
- $implicitNS = $this->options['implicitNamespaces'];
- }
-
- // Fill $nsStack with the defalut HTML5 namespaces, plus the "implicitNamespaces" array taken form $options
- array_unshift($this->nsStack, $implicitNS + array('' => self::NAMESPACE_HTML) + $this->implicitNamespaces);
-
- if ($isFragment) {
- $this->insertMode = static::IM_IN_BODY;
- $this->frag = $this->doc->createDocumentFragment();
- $this->current = $this->frag;
- }
- }
-
- /**
- * Get the document.
- */
- public function document()
- {
- return $this->doc;
- }
-
- /**
- * Get the DOM fragment for the body.
- *
- * This returns a DOMNodeList because a fragment may have zero or more
- * DOMNodes at its root.
- *
- * @see http://www.w3.org/TR/2012/CR-html5-20121217/syntax.html#concept-frag-parse-context
- *
- * @return \DOMDocumentFragment
- */
- public function fragment()
- {
- return $this->frag;
- }
-
- /**
- * Provide an instruction processor.
- *
- * This is used for handling Processor Instructions as they are
- * inserted. If omitted, PI's are inserted directly into the DOM tree.
- *
- * @param InstructionProcessor $proc
- */
- public function setInstructionProcessor(InstructionProcessor $proc)
- {
- $this->processor = $proc;
- }
-
- public function doctype($name, $idType = 0, $id = null, $quirks = false)
- {
- // This is used solely for setting quirks mode. Currently we don't
- // try to preserve the inbound DT. We convert it to HTML5.
- $this->quirks = $quirks;
-
- if ($this->insertMode > static::IM_INITIAL) {
- $this->parseError('Illegal placement of DOCTYPE tag. Ignoring: ' . $name);
-
- return;
- }
-
- $this->insertMode = static::IM_BEFORE_HTML;
- }
-
- /**
- * Process the start tag.
- *
- * @todo - XMLNS namespace handling (we need to parse, even if it's not valid)
- * - XLink, MathML and SVG namespace handling
- * - Omission rules: 8.1.2.4 Optional tags
- *
- * @param string $name
- * @param array $attributes
- * @param bool $selfClosing
- *
- * @return int
- */
- public function startTag($name, $attributes = array(), $selfClosing = false)
- {
- $lname = $this->normalizeTagName($name);
-
- // Make sure we have an html element.
- if (!$this->doc->documentElement && 'html' !== $name && !$this->frag) {
- $this->startTag('html');
- }
-
- // Set quirks mode if we're at IM_INITIAL with no doctype.
- if ($this->insertMode === static::IM_INITIAL) {
- $this->quirks = true;
- $this->parseError('No DOCTYPE specified.');
- }
-
- // SPECIAL TAG HANDLING:
- // Spec says do this, and "don't ask."
- // find the spec where this is defined... looks problematic
- if ('image' === $name && !($this->insertMode === static::IM_IN_SVG || $this->insertMode === static::IM_IN_MATHML)) {
- $name = 'img';
- }
-
- // Autoclose p tags where appropriate.
- if ($this->insertMode >= static::IM_IN_BODY && Elements::isA($name, Elements::AUTOCLOSE_P)) {
- $this->autoclose('p');
- }
-
- // Set insert mode:
- switch ($name) {
- case 'html':
- $this->insertMode = static::IM_BEFORE_HEAD;
- break;
- case 'head':
- if ($this->insertMode > static::IM_BEFORE_HEAD) {
- $this->parseError('Unexpected head tag outside of head context.');
- } else {
- $this->insertMode = static::IM_IN_HEAD;
- }
- break;
- case 'body':
- $this->insertMode = static::IM_IN_BODY;
- break;
- case 'svg':
- $this->insertMode = static::IM_IN_SVG;
- break;
- case 'math':
- $this->insertMode = static::IM_IN_MATHML;
- break;
- case 'noscript':
- if ($this->insertMode === static::IM_IN_HEAD) {
- $this->insertMode = static::IM_IN_HEAD_NOSCRIPT;
- }
- break;
- }
-
- // Special case handling for SVG.
- if ($this->insertMode === static::IM_IN_SVG) {
- $lname = Elements::normalizeSvgElement($lname);
- }
-
- $pushes = 0;
- // when we found a tag thats appears inside $nsRoots, we have to switch the defalut namespace
- if (isset($this->nsRoots[$lname]) && $this->nsStack[0][''] !== $this->nsRoots[$lname]) {
- array_unshift($this->nsStack, array(
- '' => $this->nsRoots[$lname],
- ) + $this->nsStack[0]);
- ++$pushes;
- }
- $needsWorkaround = false;
- if (isset($this->options['xmlNamespaces']) && $this->options['xmlNamespaces']) {
- // when xmlNamespaces is true a and we found a 'xmlns' or 'xmlns:*' attribute, we should add a new item to the $nsStack
- foreach ($attributes as $aName => $aVal) {
- if ('xmlns' === $aName) {
- $needsWorkaround = $aVal;
- array_unshift($this->nsStack, array(
- '' => $aVal,
- ) + $this->nsStack[0]);
- ++$pushes;
- } elseif ('xmlns' === (($pos = strpos($aName, ':')) ? substr($aName, 0, $pos) : '')) {
- array_unshift($this->nsStack, array(
- substr($aName, $pos + 1) => $aVal,
- ) + $this->nsStack[0]);
- ++$pushes;
- }
- }
- }
-
- if ($this->onlyInline && Elements::isA($lname, Elements::BLOCK_TAG)) {
- $this->autoclose($this->onlyInline);
- $this->onlyInline = null;
- }
-
- try {
- $prefix = ($pos = strpos($lname, ':')) ? substr($lname, 0, $pos) : '';
-
- if (false !== $needsWorkaround) {
- $xml = "<$lname xmlns=\"$needsWorkaround\" " . (strlen($prefix) && isset($this->nsStack[0][$prefix]) ? ("xmlns:$prefix=\"" . $this->nsStack[0][$prefix] . '"') : '') . '/>';
-
- $frag = new \DOMDocument('1.0', 'UTF-8');
- $frag->loadXML($xml);
-
- $ele = $this->doc->importNode($frag->documentElement, true);
- } else {
- if (!isset($this->nsStack[0][$prefix]) || ('' === $prefix && isset($this->options[self::OPT_DISABLE_HTML_NS]) && $this->options[self::OPT_DISABLE_HTML_NS])) {
- $ele = $this->doc->createElement($lname);
- } else {
- $ele = $this->doc->createElementNS($this->nsStack[0][$prefix], $lname);
- }
- }
- } catch (\DOMException $e) {
- $this->parseError("Illegal tag name: <$lname>. Replaced with .");
- $ele = $this->doc->createElement('invalid');
- }
-
- if (Elements::isA($lname, Elements::BLOCK_ONLY_INLINE)) {
- $this->onlyInline = $lname;
- }
-
- // When we add some namespacess, we have to track them. Later, when "endElement" is invoked, we have to remove them.
- // When we are on a void tag, we do not need to care about namesapce nesting.
- if ($pushes > 0 && !Elements::isA($name, Elements::VOID_TAG)) {
- // PHP tends to free the memory used by DOM,
- // to avoid spl_object_hash collisions whe have to avoid garbage collection of $ele storing it into $pushes
- // see https://bugs.php.net/bug.php?id=67459
- $this->pushes[spl_object_hash($ele)] = array($pushes, $ele);
- }
-
- foreach ($attributes as $aName => $aVal) {
- // xmlns attributes can't be set
- if ('xmlns' === $aName) {
- continue;
- }
-
- if ($this->insertMode === static::IM_IN_SVG) {
- $aName = Elements::normalizeSvgAttribute($aName);
- } elseif ($this->insertMode === static::IM_IN_MATHML) {
- $aName = Elements::normalizeMathMlAttribute($aName);
- }
-
- $aVal = (string) $aVal;
-
- try {
- $prefix = ($pos = strpos($aName, ':')) ? substr($aName, 0, $pos) : false;
-
- if ('xmlns' === $prefix) {
- $ele->setAttributeNS(self::NAMESPACE_XMLNS, $aName, $aVal);
- } elseif (false !== $prefix && isset($this->nsStack[0][$prefix])) {
- $ele->setAttributeNS($this->nsStack[0][$prefix], $aName, $aVal);
- } else {
- $ele->setAttribute($aName, $aVal);
- }
- } catch (\DOMException $e) {
- $this->parseError("Illegal attribute name for tag $name. Ignoring: $aName");
- continue;
- }
-
- // This is necessary on a non-DTD schema, like HTML5.
- if ('id' === $aName) {
- $ele->setIdAttribute('id', true);
- }
- }
-
- if ($this->frag !== $this->current && $this->rules->hasRules($name)) {
- // Some elements have special processing rules. Handle those separately.
- $this->current = $this->rules->evaluate($ele, $this->current);
- } else {
- // Otherwise, it's a standard element.
- $this->current->appendChild($ele);
-
- if (!Elements::isA($name, Elements::VOID_TAG)) {
- $this->current = $ele;
- }
-
- // Self-closing tags should only be respected on foreign elements
- // (and are implied on void elements)
- // See: https://www.w3.org/TR/html5/syntax.html#start-tags
- if (Elements::isHtml5Element($name)) {
- $selfClosing = false;
- }
- }
-
- // This is sort of a last-ditch attempt to correct for cases where no head/body
- // elements are provided.
- if ($this->insertMode <= static::IM_BEFORE_HEAD && 'head' !== $name && 'html' !== $name) {
- $this->insertMode = static::IM_IN_BODY;
- }
-
- // When we are on a void tag, we do not need to care about namesapce nesting,
- // but we have to remove the namespaces pushed to $nsStack.
- if ($pushes > 0 && Elements::isA($name, Elements::VOID_TAG)) {
- // remove the namespaced definded by current node
- for ($i = 0; $i < $pushes; ++$i) {
- array_shift($this->nsStack);
- }
- }
-
- if ($selfClosing) {
- $this->endTag($name);
- }
-
- // Return the element mask, which the tokenizer can then use to set
- // various processing rules.
- return Elements::element($name);
- }
-
- public function endTag($name)
- {
- $lname = $this->normalizeTagName($name);
-
- // Special case within 12.2.6.4.7: An end tag whose tag name is "br" should be treated as an opening tag
- if ('br' === $name) {
- $this->parseError('Closing tag encountered for void element br.');
-
- $this->startTag('br');
- }
- // Ignore closing tags for other unary elements.
- elseif (Elements::isA($name, Elements::VOID_TAG)) {
- return;
- }
-
- if ($this->insertMode <= static::IM_BEFORE_HTML) {
- // 8.2.5.4.2
- if (in_array($name, array(
- 'html',
- 'br',
- 'head',
- 'title',
- ))) {
- $this->startTag('html');
- $this->endTag($name);
- $this->insertMode = static::IM_BEFORE_HEAD;
-
- return;
- }
-
- // Ignore the tag.
- $this->parseError('Illegal closing tag at global scope.');
-
- return;
- }
-
- // Special case handling for SVG.
- if ($this->insertMode === static::IM_IN_SVG) {
- $lname = Elements::normalizeSvgElement($lname);
- }
-
- $cid = spl_object_hash($this->current);
-
- // XXX: HTML has no parent. What do we do, though,
- // if this element appears in the wrong place?
- if ('html' === $lname) {
- return;
- }
-
- // remove the namespaced definded by current node
- if (isset($this->pushes[$cid])) {
- for ($i = 0; $i < $this->pushes[$cid][0]; ++$i) {
- array_shift($this->nsStack);
- }
- unset($this->pushes[$cid]);
- }
-
- if (!$this->autoclose($lname)) {
- $this->parseError('Could not find closing tag for ' . $lname);
- }
-
- switch ($lname) {
- case 'head':
- $this->insertMode = static::IM_AFTER_HEAD;
- break;
- case 'body':
- $this->insertMode = static::IM_AFTER_BODY;
- break;
- case 'svg':
- case 'mathml':
- $this->insertMode = static::IM_IN_BODY;
- break;
- }
- }
-
- public function comment($cdata)
- {
- // TODO: Need to handle case where comment appears outside of the HTML tag.
- $node = $this->doc->createComment($cdata);
- $this->current->appendChild($node);
- }
-
- public function text($data)
- {
- // XXX: Hmmm.... should we really be this strict?
- if ($this->insertMode < static::IM_IN_HEAD) {
- // Per '8.2.5.4.3 The "before head" insertion mode' the characters
- // " \t\n\r\f" should be ignored but no mention of a parse error. This is
- // practical as most documents contain these characters. Other text is not
- // expected here so recording a parse error is necessary.
- $dataTmp = trim($data, " \t\n\r\f");
- if (!empty($dataTmp)) {
- // fprintf(STDOUT, "Unexpected insert mode: %d", $this->insertMode);
- $this->parseError('Unexpected text. Ignoring: ' . $dataTmp);
- }
-
- return;
- }
- // fprintf(STDOUT, "Appending text %s.", $data);
- $node = $this->doc->createTextNode($data);
- $this->current->appendChild($node);
- }
-
- public function eof()
- {
- // If the $current isn't the $root, do we need to do anything?
- }
-
- public function parseError($msg, $line = 0, $col = 0)
- {
- $this->errors[] = sprintf('Line %d, Col %d: %s', $line, $col, $msg);
- }
-
- public function getErrors()
- {
- return $this->errors;
- }
-
- public function cdata($data)
- {
- $node = $this->doc->createCDATASection($data);
- $this->current->appendChild($node);
- }
-
- public function processingInstruction($name, $data = null)
- {
- // XXX: Ignore initial XML declaration, per the spec.
- if ($this->insertMode === static::IM_INITIAL && 'xml' === strtolower($name)) {
- return;
- }
-
- // Important: The processor may modify the current DOM tree however it sees fit.
- if ($this->processor instanceof InstructionProcessor) {
- $res = $this->processor->process($this->current, $name, $data);
- if (!empty($res)) {
- $this->current = $res;
- }
-
- return;
- }
-
- // Otherwise, this is just a dumb PI element.
- $node = $this->doc->createProcessingInstruction($name, $data);
-
- $this->current->appendChild($node);
- }
-
- // ==========================================================================
- // UTILITIES
- // ==========================================================================
-
- /**
- * Apply normalization rules to a tag name.
- * See sections 2.9 and 8.1.2.
- *
- * @param string $tagName
- *
- * @return string The normalized tag name.
- */
- protected function normalizeTagName($tagName)
- {
- /*
- * Section 2.9 suggests that we should not do this. if (strpos($name, ':') !== false) { // We know from the grammar that there must be at least one other // char besides :, since : is not a legal tag start. $parts = explode(':', $name); return array_pop($parts); }
- */
- return $tagName;
- }
-
- protected function quirksTreeResolver($name)
- {
- throw new \Exception('Not implemented.');
- }
-
- /**
- * Automatically climb the tree and close the closest node with the matching $tag.
- *
- * @param string $tagName
- *
- * @return bool
- */
- protected function autoclose($tagName)
- {
- $working = $this->current;
- do {
- if (XML_ELEMENT_NODE !== $working->nodeType) {
- return false;
- }
- if ($working->tagName === $tagName) {
- $this->current = $working->parentNode;
-
- return true;
- }
- } while ($working = $working->parentNode);
-
- return false;
- }
-
- /**
- * Checks if the given tagname is an ancestor of the present candidate.
- *
- * If $this->current or anything above $this->current matches the given tag
- * name, this returns true.
- *
- * @param string $tagName
- *
- * @return bool
- */
- protected function isAncestor($tagName)
- {
- $candidate = $this->current;
- while (XML_ELEMENT_NODE === $candidate->nodeType) {
- if ($candidate->tagName === $tagName) {
- return true;
- }
- $candidate = $candidate->parentNode;
- }
-
- return false;
- }
-
- /**
- * Returns true if the immediate parent element is of the given tagname.
- *
- * @param string $tagName
- *
- * @return bool
- */
- protected function isParent($tagName)
- {
- return $this->current->tagName === $tagName;
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/masterminds/html5/src/HTML5/Parser/EventHandler.php b/fixtures/symfony_5_local_deps/vendor/masterminds/html5/src/HTML5/Parser/EventHandler.php
deleted file mode 100644
index 9893a718b..000000000
--- a/fixtures/symfony_5_local_deps/vendor/masterminds/html5/src/HTML5/Parser/EventHandler.php
+++ /dev/null
@@ -1,114 +0,0 @@
-).
- *
- * @return int one of the Tokenizer::TEXTMODE_* constants
- */
- public function startTag($name, $attributes = array(), $selfClosing = false);
-
- /**
- * An end-tag.
- */
- public function endTag($name);
-
- /**
- * A comment section (unparsed character data).
- */
- public function comment($cdata);
-
- /**
- * A unit of parsed character data.
- *
- * Entities in this text are *already decoded*.
- */
- public function text($cdata);
-
- /**
- * Indicates that the document has been entirely processed.
- */
- public function eof();
-
- /**
- * Emitted when the parser encounters an error condition.
- */
- public function parseError($msg, $line, $col);
-
- /**
- * A CDATA section.
- *
- * @param string $data
- * The unparsed character data
- */
- public function cdata($data);
-
- /**
- * This is a holdover from the XML spec.
- *
- * While user agents don't get PIs, server-side does.
- *
- * @param string $name The name of the processor (e.g. 'php').
- * @param string $data The unparsed data.
- */
- public function processingInstruction($name, $data = null);
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/masterminds/html5/src/HTML5/Parser/FileInputStream.php b/fixtures/symfony_5_local_deps/vendor/masterminds/html5/src/HTML5/Parser/FileInputStream.php
deleted file mode 100644
index b081ed96b..000000000
--- a/fixtures/symfony_5_local_deps/vendor/masterminds/html5/src/HTML5/Parser/FileInputStream.php
+++ /dev/null
@@ -1,33 +0,0 @@
-errors = UTF8Utils::checkForIllegalCodepoints($data);
-
- $data = $this->replaceLinefeeds($data);
-
- $this->data = $data;
- $this->char = 0;
- $this->EOF = strlen($data);
- }
-
- /**
- * Check if upcomming chars match the given sequence.
- *
- * This will read the stream for the $sequence. If it's
- * found, this will return true. If not, return false.
- * Since this unconsumes any chars it reads, the caller
- * will still need to read the next sequence, even if
- * this returns true.
- *
- * Example: $this->scanner->sequenceMatches('') will
- * see if the input stream is at the start of a
- * '' string.
- *
- * @param string $sequence
- * @param bool $caseSensitive
- *
- * @return bool
- */
- public function sequenceMatches($sequence, $caseSensitive = true)
- {
- $portion = substr($this->data, $this->char, strlen($sequence));
-
- return $caseSensitive ? $portion === $sequence : 0 === strcasecmp($portion, $sequence);
- }
-
- /**
- * Get the current position.
- *
- * @return int The current intiger byte position.
- */
- public function position()
- {
- return $this->char;
- }
-
- /**
- * Take a peek at the next character in the data.
- *
- * @return string The next character.
- */
- public function peek()
- {
- if (($this->char + 1) < $this->EOF) {
- return $this->data[$this->char + 1];
- }
-
- return false;
- }
-
- /**
- * Get the next character.
- * Note: This advances the pointer.
- *
- * @return string The next character.
- */
- public function next()
- {
- ++$this->char;
-
- if ($this->char < $this->EOF) {
- return $this->data[$this->char];
- }
-
- return false;
- }
-
- /**
- * Get the current character.
- * Note, this does not advance the pointer.
- *
- * @return string The current character.
- */
- public function current()
- {
- if ($this->char < $this->EOF) {
- return $this->data[$this->char];
- }
-
- return false;
- }
-
- /**
- * Silently consume N chars.
- *
- * @param int $count
- */
- public function consume($count = 1)
- {
- $this->char += $count;
- }
-
- /**
- * Unconsume some of the data.
- * This moves the data pointer backwards.
- *
- * @param int $howMany The number of characters to move the pointer back.
- */
- public function unconsume($howMany = 1)
- {
- if (($this->char - $howMany) >= 0) {
- $this->char -= $howMany;
- }
- }
-
- /**
- * Get the next group of that contains hex characters.
- * Note, along with getting the characters the pointer in the data will be
- * moved as well.
- *
- * @return string The next group that is hex characters.
- */
- public function getHex()
- {
- return $this->doCharsWhile(static::CHARS_HEX);
- }
-
- /**
- * Get the next group of characters that are ASCII Alpha characters.
- * Note, along with getting the characters the pointer in the data will be
- * moved as well.
- *
- * @return string The next group of ASCII alpha characters.
- */
- public function getAsciiAlpha()
- {
- return $this->doCharsWhile(static::CHARS_ALPHA);
- }
-
- /**
- * Get the next group of characters that are ASCII Alpha characters and numbers.
- * Note, along with getting the characters the pointer in the data will be
- * moved as well.
- *
- * @return string The next group of ASCII alpha characters and numbers.
- */
- public function getAsciiAlphaNum()
- {
- return $this->doCharsWhile(static::CHARS_ALNUM);
- }
-
- /**
- * Get the next group of numbers.
- * Note, along with getting the characters the pointer in the data will be
- * moved as well.
- *
- * @return string The next group of numbers.
- */
- public function getNumeric()
- {
- return $this->doCharsWhile('0123456789');
- }
-
- /**
- * Consume whitespace.
- * Whitespace in HTML5 is: formfeed, tab, newline, space.
- *
- * @return int The length of the matched whitespaces.
- */
- public function whitespace()
- {
- if ($this->char >= $this->EOF) {
- return false;
- }
-
- $len = strspn($this->data, "\n\t\f ", $this->char);
-
- $this->char += $len;
-
- return $len;
- }
-
- /**
- * Returns the current line that is being consumed.
- *
- * @return int The current line number.
- */
- public function currentLine()
- {
- if (empty($this->EOF) || 0 === $this->char) {
- return 1;
- }
-
- // Add one to $this->char because we want the number for the next
- // byte to be processed.
- return substr_count($this->data, "\n", 0, min($this->char, $this->EOF)) + 1;
- }
-
- /**
- * Read chars until something in the mask is encountered.
- *
- * @param string $mask
- *
- * @return mixed
- */
- public function charsUntil($mask)
- {
- return $this->doCharsUntil($mask);
- }
-
- /**
- * Read chars as long as the mask matches.
- *
- * @param string $mask
- *
- * @return int
- */
- public function charsWhile($mask)
- {
- return $this->doCharsWhile($mask);
- }
-
- /**
- * Returns the current column of the current line that the tokenizer is at.
- *
- * Newlines are column 0. The first char after a newline is column 1.
- *
- * @return int The column number.
- */
- public function columnOffset()
- {
- // Short circuit for the first char.
- if (0 === $this->char) {
- return 0;
- }
-
- // strrpos is weird, and the offset needs to be negative for what we
- // want (i.e., the last \n before $this->char). This needs to not have
- // one (to make it point to the next character, the one we want the
- // position of) added to it because strrpos's behaviour includes the
- // final offset byte.
- $backwardFrom = $this->char - 1 - strlen($this->data);
- $lastLine = strrpos($this->data, "\n", $backwardFrom);
-
- // However, for here we want the length up until the next byte to be
- // processed, so add one to the current byte ($this->char).
- if (false !== $lastLine) {
- $findLengthOf = substr($this->data, $lastLine + 1, $this->char - 1 - $lastLine);
- } else {
- // After a newline.
- $findLengthOf = substr($this->data, 0, $this->char);
- }
-
- return UTF8Utils::countChars($findLengthOf);
- }
-
- /**
- * Get all characters until EOF.
- *
- * This consumes characters until the EOF.
- *
- * @return int The number of characters remaining.
- */
- public function remainingChars()
- {
- if ($this->char < $this->EOF) {
- $data = substr($this->data, $this->char);
- $this->char = $this->EOF;
-
- return $data;
- }
-
- return ''; // false;
- }
-
- /**
- * Replace linefeed characters according to the spec.
- *
- * @param $data
- *
- * @return string
- */
- private function replaceLinefeeds($data)
- {
- /*
- * U+000D CARRIAGE RETURN (CR) characters and U+000A LINE FEED (LF) characters are treated specially.
- * Any CR characters that are followed by LF characters must be removed, and any CR characters not
- * followed by LF characters must be converted to LF characters. Thus, newlines in HTML DOMs are
- * represented by LF characters, and there are never any CR characters in the input to the tokenization
- * stage.
- */
- $crlfTable = array(
- "\0" => "\xEF\xBF\xBD",
- "\r\n" => "\n",
- "\r" => "\n",
- );
-
- return strtr($data, $crlfTable);
- }
-
- /**
- * Read to a particular match (or until $max bytes are consumed).
- *
- * This operates on byte sequences, not characters.
- *
- * Matches as far as possible until we reach a certain set of bytes
- * and returns the matched substring.
- *
- * @param string $bytes Bytes to match.
- * @param int $max Maximum number of bytes to scan.
- *
- * @return mixed Index or false if no match is found. You should use strong
- * equality when checking the result, since index could be 0.
- */
- private function doCharsUntil($bytes, $max = null)
- {
- if ($this->char >= $this->EOF) {
- return false;
- }
-
- if (0 === $max || $max) {
- $len = strcspn($this->data, $bytes, $this->char, $max);
- } else {
- $len = strcspn($this->data, $bytes, $this->char);
- }
-
- $string = (string) substr($this->data, $this->char, $len);
- $this->char += $len;
-
- return $string;
- }
-
- /**
- * Returns the string so long as $bytes matches.
- *
- * Matches as far as possible with a certain set of bytes
- * and returns the matched substring.
- *
- * @param string $bytes A mask of bytes to match. If ANY byte in this mask matches the
- * current char, the pointer advances and the char is part of the
- * substring.
- * @param int $max The max number of chars to read.
- *
- * @return string
- */
- private function doCharsWhile($bytes, $max = null)
- {
- if ($this->char >= $this->EOF) {
- return false;
- }
-
- if (0 === $max || $max) {
- $len = strspn($this->data, $bytes, $this->char, $max);
- } else {
- $len = strspn($this->data, $bytes, $this->char);
- }
-
- $string = (string) substr($this->data, $this->char, $len);
- $this->char += $len;
-
- return $string;
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/masterminds/html5/src/HTML5/Parser/StringInputStream.php b/fixtures/symfony_5_local_deps/vendor/masterminds/html5/src/HTML5/Parser/StringInputStream.php
deleted file mode 100644
index 0c213feb6..000000000
--- a/fixtures/symfony_5_local_deps/vendor/masterminds/html5/src/HTML5/Parser/StringInputStream.php
+++ /dev/null
@@ -1,331 +0,0 @@
-
-
-Permission is hereby granted, free of charge, to any person obtaining a
-copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-*/
-
-// Some conventions:
-// - /* */ indicates verbatim text from the HTML 5 specification
-// MPB: Not sure which version of the spec. Moving from HTML5lib to
-// HTML5-PHP, I have been using this version:
-// http://www.w3.org/TR/2012/CR-html5-20121217/Overview.html#contents
-//
-// - // indicates regular comments
-
-/**
- * @deprecated since 2.4, to remove in 3.0. Use a string in the scanner instead.
- */
-class StringInputStream implements InputStream
-{
- /**
- * The string data we're parsing.
- */
- private $data;
-
- /**
- * The current integer byte position we are in $data.
- */
- private $char;
-
- /**
- * Length of $data; when $char === $data, we are at the end-of-file.
- */
- private $EOF;
-
- /**
- * Parse errors.
- */
- public $errors = array();
-
- /**
- * Create a new InputStream wrapper.
- *
- * @param string $data Data to parse.
- * @param string $encoding The encoding to use for the data.
- * @param string $debug A fprintf format to use to echo the data on stdout.
- */
- public function __construct($data, $encoding = 'UTF-8', $debug = '')
- {
- $data = UTF8Utils::convertToUTF8($data, $encoding);
- if ($debug) {
- fprintf(STDOUT, $debug, $data, strlen($data));
- }
-
- // There is good reason to question whether it makes sense to
- // do this here, since most of these checks are done during
- // parsing, and since this check doesn't actually *do* anything.
- $this->errors = UTF8Utils::checkForIllegalCodepoints($data);
-
- $data = $this->replaceLinefeeds($data);
-
- $this->data = $data;
- $this->char = 0;
- $this->EOF = strlen($data);
- }
-
- public function __toString()
- {
- return $this->data;
- }
-
- /**
- * Replace linefeed characters according to the spec.
- */
- protected function replaceLinefeeds($data)
- {
- /*
- * U+000D CARRIAGE RETURN (CR) characters and U+000A LINE FEED (LF) characters are treated specially.
- * Any CR characters that are followed by LF characters must be removed, and any CR characters not
- * followed by LF characters must be converted to LF characters. Thus, newlines in HTML DOMs are
- * represented by LF characters, and there are never any CR characters in the input to the tokenization
- * stage.
- */
- $crlfTable = array(
- "\0" => "\xEF\xBF\xBD",
- "\r\n" => "\n",
- "\r" => "\n",
- );
-
- return strtr($data, $crlfTable);
- }
-
- /**
- * Returns the current line that the tokenizer is at.
- */
- public function currentLine()
- {
- if (empty($this->EOF) || 0 === $this->char) {
- return 1;
- }
- // Add one to $this->char because we want the number for the next
- // byte to be processed.
- return substr_count($this->data, "\n", 0, min($this->char, $this->EOF)) + 1;
- }
-
- /**
- * @deprecated
- */
- public function getCurrentLine()
- {
- return $this->currentLine();
- }
-
- /**
- * Returns the current column of the current line that the tokenizer is at.
- * Newlines are column 0. The first char after a newline is column 1.
- *
- * @return int The column number.
- */
- public function columnOffset()
- {
- // Short circuit for the first char.
- if (0 === $this->char) {
- return 0;
- }
- // strrpos is weird, and the offset needs to be negative for what we
- // want (i.e., the last \n before $this->char). This needs to not have
- // one (to make it point to the next character, the one we want the
- // position of) added to it because strrpos's behaviour includes the
- // final offset byte.
- $backwardFrom = $this->char - 1 - strlen($this->data);
- $lastLine = strrpos($this->data, "\n", $backwardFrom);
-
- // However, for here we want the length up until the next byte to be
- // processed, so add one to the current byte ($this->char).
- if (false !== $lastLine) {
- $findLengthOf = substr($this->data, $lastLine + 1, $this->char - 1 - $lastLine);
- } else {
- // After a newline.
- $findLengthOf = substr($this->data, 0, $this->char);
- }
-
- return UTF8Utils::countChars($findLengthOf);
- }
-
- /**
- * @deprecated
- */
- public function getColumnOffset()
- {
- return $this->columnOffset();
- }
-
- /**
- * Get the current character.
- *
- * @return string The current character.
- */
- public function current()
- {
- return $this->data[$this->char];
- }
-
- /**
- * Advance the pointer.
- * This is part of the Iterator interface.
- */
- public function next()
- {
- ++$this->char;
- }
-
- /**
- * Rewind to the start of the string.
- */
- public function rewind()
- {
- $this->char = 0;
- }
-
- /**
- * Is the current pointer location valid.
- *
- * @return bool Whether the current pointer location is valid.
- */
- public function valid()
- {
- return $this->char < $this->EOF;
- }
-
- /**
- * Get all characters until EOF.
- *
- * This reads to the end of the file, and sets the read marker at the
- * end of the file.
- *
- * Note this performs bounds checking.
- *
- * @return string Returns the remaining text. If called when the InputStream is
- * already exhausted, it returns an empty string.
- */
- public function remainingChars()
- {
- if ($this->char < $this->EOF) {
- $data = substr($this->data, $this->char);
- $this->char = $this->EOF;
-
- return $data;
- }
-
- return ''; // false;
- }
-
- /**
- * Read to a particular match (or until $max bytes are consumed).
- *
- * This operates on byte sequences, not characters.
- *
- * Matches as far as possible until we reach a certain set of bytes
- * and returns the matched substring.
- *
- * @param string $bytes Bytes to match.
- * @param int $max Maximum number of bytes to scan.
- *
- * @return mixed Index or false if no match is found. You should use strong
- * equality when checking the result, since index could be 0.
- */
- public function charsUntil($bytes, $max = null)
- {
- if ($this->char >= $this->EOF) {
- return false;
- }
-
- if (0 === $max || $max) {
- $len = strcspn($this->data, $bytes, $this->char, $max);
- } else {
- $len = strcspn($this->data, $bytes, $this->char);
- }
-
- $string = (string) substr($this->data, $this->char, $len);
- $this->char += $len;
-
- return $string;
- }
-
- /**
- * Returns the string so long as $bytes matches.
- *
- * Matches as far as possible with a certain set of bytes
- * and returns the matched substring.
- *
- * @param string $bytes A mask of bytes to match. If ANY byte in this mask matches the
- * current char, the pointer advances and the char is part of the
- * substring.
- * @param int $max The max number of chars to read.
- *
- * @return string
- */
- public function charsWhile($bytes, $max = null)
- {
- if ($this->char >= $this->EOF) {
- return false;
- }
-
- if (0 === $max || $max) {
- $len = strspn($this->data, $bytes, $this->char, $max);
- } else {
- $len = strspn($this->data, $bytes, $this->char);
- }
- $string = (string) substr($this->data, $this->char, $len);
- $this->char += $len;
-
- return $string;
- }
-
- /**
- * Unconsume characters.
- *
- * @param int $howMany The number of characters to unconsume.
- */
- public function unconsume($howMany = 1)
- {
- if (($this->char - $howMany) >= 0) {
- $this->char -= $howMany;
- }
- }
-
- /**
- * Look ahead without moving cursor.
- */
- public function peek()
- {
- if (($this->char + 1) <= $this->EOF) {
- return $this->data[$this->char + 1];
- }
-
- return false;
- }
-
- public function key()
- {
- return $this->char;
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/masterminds/html5/src/HTML5/Parser/Tokenizer.php b/fixtures/symfony_5_local_deps/vendor/masterminds/html5/src/HTML5/Parser/Tokenizer.php
deleted file mode 100644
index e8b4aa098..000000000
--- a/fixtures/symfony_5_local_deps/vendor/masterminds/html5/src/HTML5/Parser/Tokenizer.php
+++ /dev/null
@@ -1,1214 +0,0 @@
-scanner = $scanner;
- $this->events = $eventHandler;
- $this->mode = $mode;
- }
-
- /**
- * Begin parsing.
- *
- * This will begin scanning the document, tokenizing as it goes.
- * Tokens are emitted into the event handler.
- *
- * Tokenizing will continue until the document is completely
- * read. Errors are emitted into the event handler, but
- * the parser will attempt to continue parsing until the
- * entire input stream is read.
- */
- public function parse()
- {
- do {
- $this->consumeData();
- // FIXME: Add infinite loop protection.
- } while ($this->carryOn);
- }
-
- /**
- * Set the text mode for the character data reader.
- *
- * HTML5 defines three different modes for reading text:
- * - Normal: Read until a tag is encountered.
- * - RCDATA: Read until a tag is encountered, but skip a few otherwise-
- * special characters.
- * - Raw: Read until a special closing tag is encountered (viz. pre, script)
- *
- * This allows those modes to be set.
- *
- * Normally, setting is done by the event handler via a special return code on
- * startTag(), but it can also be set manually using this function.
- *
- * @param int $textmode One of Elements::TEXT_*.
- * @param string $untilTag The tag that should stop RAW or RCDATA mode. Normal mode does not
- * use this indicator.
- */
- public function setTextMode($textmode, $untilTag = null)
- {
- $this->textMode = $textmode & (Elements::TEXT_RAW | Elements::TEXT_RCDATA);
- $this->untilTag = $untilTag;
- }
-
- /**
- * Consume a character and make a move.
- * HTML5 8.2.4.1.
- */
- protected function consumeData()
- {
- $tok = $this->scanner->current();
-
- if ('&' === $tok) {
- // Character reference
- $ref = $this->decodeCharacterReference();
- $this->buffer($ref);
-
- $tok = $this->scanner->current();
- }
-
- // Parse tag
- if ('<' === $tok) {
- // Any buffered text data can go out now.
- $this->flushBuffer();
-
- $tok = $this->scanner->next();
-
- if (false === $tok) {
- // end of string
- $this->parseError('Illegal tag opening');
- } elseif ('!' === $tok) {
- $this->markupDeclaration();
- } elseif ('/' === $tok) {
- $this->endTag();
- } elseif ('?' === $tok) {
- $this->processingInstruction();
- } elseif ($this->is_alpha($tok)) {
- $this->tagName();
- } else {
- $this->parseError('Illegal tag opening');
- // TODO is this necessary ?
- $this->characterData();
- }
-
- $tok = $this->scanner->current();
- }
-
- if (false === $tok) {
- // Handle end of document
- $this->eof();
- } else {
- // Parse character
- switch ($this->textMode) {
- case Elements::TEXT_RAW:
- $this->rawText($tok);
- break;
-
- case Elements::TEXT_RCDATA:
- $this->rcdata($tok);
- break;
-
- default:
- if ('<' === $tok || '&' === $tok) {
- break;
- }
-
- // NULL character
- if ("\00" === $tok) {
- $this->parseError('Received null character.');
-
- $this->text .= $tok;
- $this->scanner->consume();
-
- break;
- }
-
- $this->text .= $this->scanner->charsUntil("<&\0");
- }
- }
-
- return $this->carryOn;
- }
-
- /**
- * Parse anything that looks like character data.
- *
- * Different rules apply based on the current text mode.
- *
- * @see Elements::TEXT_RAW Elements::TEXT_RCDATA.
- */
- protected function characterData()
- {
- $tok = $this->scanner->current();
- if (false === $tok) {
- return false;
- }
- switch ($this->textMode) {
- case Elements::TEXT_RAW:
- return $this->rawText($tok);
- case Elements::TEXT_RCDATA:
- return $this->rcdata($tok);
- default:
- if ('<' === $tok || '&' === $tok) {
- return false;
- }
-
- return $this->text($tok);
- }
- }
-
- /**
- * This buffers the current token as character data.
- *
- * @param string $tok The current token.
- *
- * @return bool
- */
- protected function text($tok)
- {
- // This should never happen...
- if (false === $tok) {
- return false;
- }
-
- // NULL character
- if ("\00" === $tok) {
- $this->parseError('Received null character.');
- }
-
- $this->buffer($tok);
- $this->scanner->consume();
-
- return true;
- }
-
- /**
- * Read text in RAW mode.
- *
- * @param string $tok The current token.
- *
- * @return bool
- */
- protected function rawText($tok)
- {
- if (is_null($this->untilTag)) {
- return $this->text($tok);
- }
-
- $sequence = '' . $this->untilTag . '>';
- $txt = $this->readUntilSequence($sequence);
- $this->events->text($txt);
- $this->setTextMode(0);
-
- return $this->endTag();
- }
-
- /**
- * Read text in RCDATA mode.
- *
- * @param string $tok The current token.
- *
- * @return bool
- */
- protected function rcdata($tok)
- {
- if (is_null($this->untilTag)) {
- return $this->text($tok);
- }
-
- $sequence = '' . $this->untilTag;
- $txt = '';
-
- $caseSensitive = !Elements::isHtml5Element($this->untilTag);
- while (false !== $tok && !('<' == $tok && ($this->scanner->sequenceMatches($sequence, $caseSensitive)))) {
- if ('&' == $tok) {
- $txt .= $this->decodeCharacterReference();
- $tok = $this->scanner->current();
- } else {
- $txt .= $tok;
- $tok = $this->scanner->next();
- }
- }
- $len = strlen($sequence);
- $this->scanner->consume($len);
- $len += $this->scanner->whitespace();
- if ('>' !== $this->scanner->current()) {
- $this->parseError('Unclosed RCDATA end tag');
- }
-
- $this->scanner->unconsume($len);
- $this->events->text($txt);
- $this->setTextMode(0);
-
- return $this->endTag();
- }
-
- /**
- * If the document is read, emit an EOF event.
- */
- protected function eof()
- {
- // fprintf(STDOUT, "EOF");
- $this->flushBuffer();
- $this->events->eof();
- $this->carryOn = false;
- }
-
- /**
- * Look for markup.
- */
- protected function markupDeclaration()
- {
- $tok = $this->scanner->next();
-
- // Comment:
- if ('-' == $tok && '-' == $this->scanner->peek()) {
- $this->scanner->consume(2);
-
- return $this->comment();
- } elseif ('D' == $tok || 'd' == $tok) { // Doctype
- return $this->doctype();
- } elseif ('[' == $tok) { // CDATA section
- return $this->cdataSection();
- }
-
- // FINISH
- $this->parseError('Expected . Emit an empty comment because 8.2.4.46 says to.
- if ('>' == $tok) {
- // Parse error. Emit the comment token.
- $this->parseError("Expected comment data, got '>'");
- $this->events->comment('');
- $this->scanner->consume();
-
- return true;
- }
-
- // Replace NULL with the replacement char.
- if ("\0" == $tok) {
- $tok = UTF8Utils::FFFD;
- }
- while (!$this->isCommentEnd()) {
- $comment .= $tok;
- $tok = $this->scanner->next();
- }
-
- $this->events->comment($comment);
- $this->scanner->consume();
-
- return true;
- }
-
- /**
- * Check if the scanner has reached the end of a comment.
- *
- * @return bool
- */
- protected function isCommentEnd()
- {
- $tok = $this->scanner->current();
-
- // EOF
- if (false === $tok) {
- // Hit the end.
- $this->parseError('Unexpected EOF in a comment.');
-
- return true;
- }
-
- // If next two tokens are not '--', not the end.
- if ('-' != $tok || '-' != $this->scanner->peek()) {
- return false;
- }
-
- $this->scanner->consume(2); // Consume '-' and one of '!' or '>'
-
- // Test for '>'
- if ('>' == $this->scanner->current()) {
- return true;
- }
- // Test for '!>'
- if ('!' == $this->scanner->current() && '>' == $this->scanner->peek()) {
- $this->scanner->consume(); // Consume the last '>'
- return true;
- }
- // Unread '-' and one of '!' or '>';
- $this->scanner->unconsume(2);
-
- return false;
- }
-
- /**
- * Parse a DOCTYPE.
- *
- * Parse a DOCTYPE declaration. This method has strong bearing on whether or
- * not Quirksmode is enabled on the event handler.
- *
- * @todo This method is a little long. Should probably refactor.
- *
- * @return bool
- */
- protected function doctype()
- {
- // Check that string is DOCTYPE.
- if ($this->scanner->sequenceMatches('DOCTYPE', false)) {
- $this->scanner->consume(7);
- } else {
- $chars = $this->scanner->charsWhile('DOCTYPEdoctype');
- $this->parseError('Expected DOCTYPE, got %s', $chars);
-
- return $this->bogusComment('scanner->whitespace();
- $tok = $this->scanner->current();
-
- // EOF: die.
- if (false === $tok) {
- $this->events->doctype('html5', EventHandler::DOCTYPE_NONE, '', true);
- $this->eof();
-
- return true;
- }
-
- // NULL char: convert.
- if ("\0" === $tok) {
- $this->parseError('Unexpected null character in DOCTYPE.');
- }
-
- $stop = " \n\f>";
- $doctypeName = $this->scanner->charsUntil($stop);
- // Lowercase ASCII, replace \0 with FFFD
- $doctypeName = strtolower(strtr($doctypeName, "\0", UTF8Utils::FFFD));
-
- $tok = $this->scanner->current();
-
- // If false, emit a parse error, DOCTYPE, and return.
- if (false === $tok) {
- $this->parseError('Unexpected EOF in DOCTYPE declaration.');
- $this->events->doctype($doctypeName, EventHandler::DOCTYPE_NONE, null, true);
-
- return true;
- }
-
- // Short DOCTYPE, like
- if ('>' == $tok) {
- // DOCTYPE without a name.
- if (0 == strlen($doctypeName)) {
- $this->parseError('Expected a DOCTYPE name. Got nothing.');
- $this->events->doctype($doctypeName, 0, null, true);
- $this->scanner->consume();
-
- return true;
- }
- $this->events->doctype($doctypeName);
- $this->scanner->consume();
-
- return true;
- }
- $this->scanner->whitespace();
-
- $pub = strtoupper($this->scanner->getAsciiAlpha());
- $white = $this->scanner->whitespace();
-
- // Get ID, and flag it as pub or system.
- if (('PUBLIC' == $pub || 'SYSTEM' == $pub) && $white > 0) {
- // Get the sys ID.
- $type = 'PUBLIC' == $pub ? EventHandler::DOCTYPE_PUBLIC : EventHandler::DOCTYPE_SYSTEM;
- $id = $this->quotedString("\0>");
- if (false === $id) {
- $this->events->doctype($doctypeName, $type, $pub, false);
-
- return true;
- }
-
- // Premature EOF.
- if (false === $this->scanner->current()) {
- $this->parseError('Unexpected EOF in DOCTYPE');
- $this->events->doctype($doctypeName, $type, $id, true);
-
- return true;
- }
-
- // Well-formed complete DOCTYPE.
- $this->scanner->whitespace();
- if ('>' == $this->scanner->current()) {
- $this->events->doctype($doctypeName, $type, $id, false);
- $this->scanner->consume();
-
- return true;
- }
-
- // If we get here, we have scanner->charsUntil('>');
- $this->parseError('Malformed DOCTYPE.');
- $this->events->doctype($doctypeName, $type, $id, true);
- $this->scanner->consume();
-
- return true;
- }
-
- // Else it's a bogus DOCTYPE.
- // Consume to > and trash.
- $this->scanner->charsUntil('>');
-
- $this->parseError('Expected PUBLIC or SYSTEM. Got %s.', $pub);
- $this->events->doctype($doctypeName, 0, null, true);
- $this->scanner->consume();
-
- return true;
- }
-
- /**
- * Utility for reading a quoted string.
- *
- * @param string $stopchars Characters (in addition to a close-quote) that should stop the string.
- * E.g. sometimes '>' is higher precedence than '"' or "'".
- *
- * @return mixed String if one is found (quotations omitted).
- */
- protected function quotedString($stopchars)
- {
- $tok = $this->scanner->current();
- if ('"' == $tok || "'" == $tok) {
- $this->scanner->consume();
- $ret = $this->scanner->charsUntil($tok . $stopchars);
- if ($this->scanner->current() == $tok) {
- $this->scanner->consume();
- } else {
- // Parse error because no close quote.
- $this->parseError('Expected %s, got %s', $tok, $this->scanner->current());
- }
-
- return $ret;
- }
-
- return false;
- }
-
- /**
- * Handle a CDATA section.
- *
- * @return bool
- */
- protected function cdataSection()
- {
- $cdata = '';
- $this->scanner->consume();
-
- $chars = $this->scanner->charsWhile('CDAT');
- if ('CDATA' != $chars || '[' != $this->scanner->current()) {
- $this->parseError('Expected [CDATA[, got %s', $chars);
-
- return $this->bogusComment('scanner->next();
- do {
- if (false === $tok) {
- $this->parseError('Unexpected EOF inside CDATA.');
- $this->bogusComment('scanner->next();
- } while (!$this->scanner->sequenceMatches(']]>'));
-
- // Consume ]]>
- $this->scanner->consume(3);
-
- $this->events->cdata($cdata);
-
- return true;
- }
-
- // ================================================================
- // Non-HTML5
- // ================================================================
-
- /**
- * Handle a processing instruction.
- *
- * XML processing instructions are supposed to be ignored in HTML5,
- * treated as "bogus comments". However, since we're not a user
- * agent, we allow them. We consume until ?> and then issue a
- * EventListener::processingInstruction() event.
- *
- * @return bool
- */
- protected function processingInstruction()
- {
- if ('?' != $this->scanner->current()) {
- return false;
- }
-
- $tok = $this->scanner->next();
- $procName = $this->scanner->getAsciiAlpha();
- $white = $this->scanner->whitespace();
-
- // If not a PI, send to bogusComment.
- if (0 == strlen($procName) || 0 == $white || false == $this->scanner->current()) {
- $this->parseError("Expected processing instruction name, got $tok");
- $this->bogusComment('' . $tok . $procName);
-
- return true;
- }
-
- $data = '';
- // As long as it's not the case that the next two chars are ? and >.
- while (!('?' == $this->scanner->current() && '>' == $this->scanner->peek())) {
- $data .= $this->scanner->current();
-
- $tok = $this->scanner->next();
- if (false === $tok) {
- $this->parseError('Unexpected EOF in processing instruction.');
- $this->events->processingInstruction($procName, $data);
-
- return true;
- }
- }
-
- $this->scanner->consume(2); // Consume the closing tag
- $this->events->processingInstruction($procName, $data);
-
- return true;
- }
-
- // ================================================================
- // UTILITY FUNCTIONS
- // ================================================================
-
- /**
- * Read from the input stream until we get to the desired sequene
- * or hit the end of the input stream.
- *
- * @param string $sequence
- *
- * @return string
- */
- protected function readUntilSequence($sequence)
- {
- $buffer = '';
-
- // Optimization for reading larger blocks faster.
- $first = substr($sequence, 0, 1);
- while (false !== $this->scanner->current()) {
- $buffer .= $this->scanner->charsUntil($first);
-
- // Stop as soon as we hit the stopping condition.
- if ($this->scanner->sequenceMatches($sequence, false)) {
- return $buffer;
- }
- $buffer .= $this->scanner->current();
- $this->scanner->consume();
- }
-
- // If we get here, we hit the EOF.
- $this->parseError('Unexpected EOF during text read.');
-
- return $buffer;
- }
-
- /**
- * Check if upcomming chars match the given sequence.
- *
- * This will read the stream for the $sequence. If it's
- * found, this will return true. If not, return false.
- * Since this unconsumes any chars it reads, the caller
- * will still need to read the next sequence, even if
- * this returns true.
- *
- * Example: $this->scanner->sequenceMatches('') will
- * see if the input stream is at the start of a
- * '' string.
- *
- * @param string $sequence
- * @param bool $caseSensitive
- *
- * @return bool
- */
- protected function sequenceMatches($sequence, $caseSensitive = true)
- {
- @trigger_error(__METHOD__ . ' method is deprecated since version 2.4 and will be removed in 3.0. Use Scanner::sequenceMatches() instead.', E_USER_DEPRECATED);
-
- return $this->scanner->sequenceMatches($sequence, $caseSensitive);
- }
-
- /**
- * Send a TEXT event with the contents of the text buffer.
- *
- * This emits an EventHandler::text() event with the current contents of the
- * temporary text buffer. (The buffer is used to group as much PCDATA
- * as we can instead of emitting lots and lots of TEXT events.)
- */
- protected function flushBuffer()
- {
- if ('' === $this->text) {
- return;
- }
- $this->events->text($this->text);
- $this->text = '';
- }
-
- /**
- * Add text to the temporary buffer.
- *
- * @see flushBuffer()
- *
- * @param string $str
- */
- protected function buffer($str)
- {
- $this->text .= $str;
- }
-
- /**
- * Emit a parse error.
- *
- * A parse error always returns false because it never consumes any
- * characters.
- *
- * @param string $msg
- *
- * @return string
- */
- protected function parseError($msg)
- {
- $args = func_get_args();
-
- if (count($args) > 1) {
- array_shift($args);
- $msg = vsprintf($msg, $args);
- }
-
- $line = $this->scanner->currentLine();
- $col = $this->scanner->columnOffset();
- $this->events->parseError($msg, $line, $col);
-
- return false;
- }
-
- /**
- * Decode a character reference and return the string.
- *
- * If $inAttribute is set to true, a bare & will be returned as-is.
- *
- * @param bool $inAttribute Set to true if the text is inside of an attribute value.
- * false otherwise.
- *
- * @return string
- */
- protected function decodeCharacterReference($inAttribute = false)
- {
- // Next char after &.
- $tok = $this->scanner->next();
- $start = $this->scanner->position();
-
- if (false === $tok) {
- return '&';
- }
-
- // These indicate not an entity. We return just
- // the &.
- if ("\t" === $tok || "\n" === $tok || "\f" === $tok || ' ' === $tok || '&' === $tok || '<' === $tok) {
- // $this->scanner->next();
- return '&';
- }
-
- // Numeric entity
- if ('#' === $tok) {
- $tok = $this->scanner->next();
-
- if (false === $tok) {
- $this->parseError('Expected DEC; HEX;, got EOF');
- $this->scanner->unconsume(1);
-
- return '&';
- }
-
- // Hexidecimal encoding.
- // X[0-9a-fA-F]+;
- // x[0-9a-fA-F]+;
- if ('x' === $tok || 'X' === $tok) {
- $tok = $this->scanner->next(); // Consume x
-
- // Convert from hex code to char.
- $hex = $this->scanner->getHex();
- if (empty($hex)) {
- $this->parseError('Expected HEX;, got %s', $tok);
- // We unconsume because we don't know what parser rules might
- // be in effect for the remaining chars. For example. '>'
- // might result in a specific parsing rule inside of tag
- // contexts, while not inside of pcdata context.
- $this->scanner->unconsume(2);
-
- return '&';
- }
- $entity = CharacterReference::lookupHex($hex);
- } // Decimal encoding.
- // [0-9]+;
- else {
- // Convert from decimal to char.
- $numeric = $this->scanner->getNumeric();
- if (false === $numeric) {
- $this->parseError('Expected DIGITS;, got %s', $tok);
- $this->scanner->unconsume(2);
-
- return '&';
- }
- $entity = CharacterReference::lookupDecimal($numeric);
- }
- } elseif ('=' === $tok && $inAttribute) {
- return '&';
- } else { // String entity.
- // Attempt to consume a string up to a ';'.
- // [a-zA-Z0-9]+;
- $cname = $this->scanner->getAsciiAlphaNum();
- $entity = CharacterReference::lookupName($cname);
-
- // When no entity is found provide the name of the unmatched string
- // and continue on as the & is not part of an entity. The & will
- // be converted to & elsewhere.
- if (null === $entity) {
- if (!$inAttribute || '' === $cname) {
- $this->parseError("No match in entity table for '%s'", $cname);
- }
- $this->scanner->unconsume($this->scanner->position() - $start);
-
- return '&';
- }
- }
-
- // The scanner has advanced the cursor for us.
- $tok = $this->scanner->current();
-
- // We have an entity. We're done here.
- if (';' === $tok) {
- $this->scanner->consume();
-
- return $entity;
- }
-
- // Failing to match ; means unconsume the entire string.
- $this->scanner->unconsume($this->scanner->position() - $start);
-
- $this->parseError('Expected &ENTITY;, got &ENTITY%s (no trailing ;) ', $tok);
-
- return '&';
- }
-
- /**
- * Checks whether a (single-byte) character is an ASCII letter or not.
- *
- * @param string $input A single-byte string
- *
- * @return bool True if it is a letter, False otherwise
- */
- protected function is_alpha($input)
- {
- $code = ord($input);
-
- return ($code >= 97 && $code <= 122) || ($code >= 65 && $code <= 90);
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/masterminds/html5/src/HTML5/Parser/TreeBuildingRules.php b/fixtures/symfony_5_local_deps/vendor/masterminds/html5/src/HTML5/Parser/TreeBuildingRules.php
deleted file mode 100644
index 00d3951fd..000000000
--- a/fixtures/symfony_5_local_deps/vendor/masterminds/html5/src/HTML5/Parser/TreeBuildingRules.php
+++ /dev/null
@@ -1,127 +0,0 @@
- 1,
- 'dd' => 1,
- 'dt' => 1,
- 'rt' => 1,
- 'rp' => 1,
- 'tr' => 1,
- 'th' => 1,
- 'td' => 1,
- 'thead' => 1,
- 'tfoot' => 1,
- 'tbody' => 1,
- 'table' => 1,
- 'optgroup' => 1,
- 'option' => 1,
- );
-
- /**
- * Returns true if the given tagname has special processing rules.
- */
- public function hasRules($tagname)
- {
- return isset(static::$tags[$tagname]);
- }
-
- /**
- * Evaluate the rule for the current tag name.
- *
- * This may modify the existing DOM.
- *
- * @return \DOMElement The new Current DOM element.
- */
- public function evaluate($new, $current)
- {
- switch ($new->tagName) {
- case 'li':
- return $this->handleLI($new, $current);
- case 'dt':
- case 'dd':
- return $this->handleDT($new, $current);
- case 'rt':
- case 'rp':
- return $this->handleRT($new, $current);
- case 'optgroup':
- return $this->closeIfCurrentMatches($new, $current, array(
- 'optgroup',
- ));
- case 'option':
- return $this->closeIfCurrentMatches($new, $current, array(
- 'option',
- ));
- case 'tr':
- return $this->closeIfCurrentMatches($new, $current, array(
- 'tr',
- ));
- case 'td':
- case 'th':
- return $this->closeIfCurrentMatches($new, $current, array(
- 'th',
- 'td',
- ));
- case 'tbody':
- case 'thead':
- case 'tfoot':
- case 'table': // Spec isn't explicit about this, but it's necessary.
-
- return $this->closeIfCurrentMatches($new, $current, array(
- 'thead',
- 'tfoot',
- 'tbody',
- ));
- }
-
- return $current;
- }
-
- protected function handleLI($ele, $current)
- {
- return $this->closeIfCurrentMatches($ele, $current, array(
- 'li',
- ));
- }
-
- protected function handleDT($ele, $current)
- {
- return $this->closeIfCurrentMatches($ele, $current, array(
- 'dt',
- 'dd',
- ));
- }
-
- protected function handleRT($ele, $current)
- {
- return $this->closeIfCurrentMatches($ele, $current, array(
- 'rt',
- 'rp',
- ));
- }
-
- protected function closeIfCurrentMatches($ele, $current, $match)
- {
- if (in_array($current->tagName, $match, true)) {
- $current->parentNode->appendChild($ele);
- } else {
- $current->appendChild($ele);
- }
-
- return $ele;
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/masterminds/html5/src/HTML5/Parser/UTF8Utils.php b/fixtures/symfony_5_local_deps/vendor/masterminds/html5/src/HTML5/Parser/UTF8Utils.php
deleted file mode 100644
index 4405e4cc0..000000000
--- a/fixtures/symfony_5_local_deps/vendor/masterminds/html5/src/HTML5/Parser/UTF8Utils.php
+++ /dev/null
@@ -1,177 +0,0 @@
-
-
-Permission is hereby granted, free of charge, to any person obtaining a
-copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-use Masterminds\HTML5\Exception;
-
-class UTF8Utils
-{
- /**
- * The Unicode replacement character.
- */
- const FFFD = "\xEF\xBF\xBD";
-
- /**
- * Count the number of characters in a string.
- * UTF-8 aware. This will try (in order) iconv, MB, and finally a custom counter.
- *
- * @param string $string
- *
- * @return int
- */
- public static function countChars($string)
- {
- // Get the length for the string we need.
- if (function_exists('mb_strlen')) {
- return mb_strlen($string, 'utf-8');
- }
-
- if (function_exists('iconv_strlen')) {
- return iconv_strlen($string, 'utf-8');
- }
-
- $count = count_chars($string);
-
- // 0x80 = 0x7F - 0 + 1 (one added to get inclusive range)
- // 0x33 = 0xF4 - 0x2C + 1 (one added to get inclusive range)
- return array_sum(array_slice($count, 0, 0x80)) + array_sum(array_slice($count, 0xC2, 0x33));
- }
-
- /**
- * Convert data from the given encoding to UTF-8.
- *
- * This has not yet been tested with charactersets other than UTF-8.
- * It should work with ISO-8859-1/-13 and standard Latin Win charsets.
- *
- * @param string $data The data to convert
- * @param string $encoding A valid encoding. Examples: http://www.php.net/manual/en/mbstring.supported-encodings.php
- *
- * @return string
- */
- public static function convertToUTF8($data, $encoding = 'UTF-8')
- {
- /*
- * From the HTML5 spec: Given an encoding, the bytes in the input stream must be converted
- * to Unicode characters for the tokeniser, as described by the rules for that encoding,
- * except that the leading U+FEFF BYTE ORDER MARK character, if any, must not be stripped
- * by the encoding layer (it is stripped by the rule below). Bytes or sequences of bytes
- * in the original byte stream that could not be converted to Unicode characters must be
- * converted to U+FFFD REPLACEMENT CHARACTER code points.
- */
-
- // mb_convert_encoding is chosen over iconv because of a bug. The best
- // details for the bug are on http://us1.php.net/manual/en/function.iconv.php#108643
- // which contains links to the actual but reports as well as work around
- // details.
- if (function_exists('mb_convert_encoding')) {
- // mb library has the following behaviors:
- // - UTF-16 surrogates result in false.
- // - Overlongs and outside Plane 16 result in empty strings.
-
- // Before we run mb_convert_encoding we need to tell it what to do with
- // characters it does not know. This could be different than the parent
- // application executing this library so we store the value, change it
- // to our needs, and then change it back when we are done. This feels
- // a little excessive and it would be great if there was a better way.
- $save = mb_substitute_character();
- mb_substitute_character('none');
- $data = mb_convert_encoding($data, 'UTF-8', $encoding);
- mb_substitute_character($save);
- }
- // @todo Get iconv running in at least some environments if that is possible.
- elseif (function_exists('iconv') && 'auto' !== $encoding) {
- // fprintf(STDOUT, "iconv found\n");
- // iconv has the following behaviors:
- // - Overlong representations are ignored.
- // - Beyond Plane 16 is replaced with a lower char.
- // - Incomplete sequences generate a warning.
- $data = @iconv($encoding, 'UTF-8//IGNORE', $data);
- } else {
- throw new Exception('Not implemented, please install mbstring or iconv');
- }
-
- /*
- * One leading U+FEFF BYTE ORDER MARK character must be ignored if any are present.
- */
- if ("\xEF\xBB\xBF" === substr($data, 0, 3)) {
- $data = substr($data, 3);
- }
-
- return $data;
- }
-
- /**
- * Checks for Unicode code points that are not valid in a document.
- *
- * @param string $data A string to analyze
- *
- * @return array An array of (string) error messages produced by the scanning
- */
- public static function checkForIllegalCodepoints($data)
- {
- // Vestigal error handling.
- $errors = array();
-
- /*
- * All U+0000 null characters in the input must be replaced by U+FFFD REPLACEMENT CHARACTERs.
- * Any occurrences of such characters is a parse error.
- */
- for ($i = 0, $count = substr_count($data, "\0"); $i < $count; ++$i) {
- $errors[] = 'null-character';
- }
-
- /*
- * Any occurrences of any characters in the ranges U+0001 to U+0008, U+000B, U+000E to U+001F, U+007F
- * to U+009F, U+D800 to U+DFFF , U+FDD0 to U+FDEF, and characters U+FFFE, U+FFFF, U+1FFFE, U+1FFFF,
- * U+2FFFE, U+2FFFF, U+3FFFE, U+3FFFF, U+4FFFE, U+4FFFF, U+5FFFE, U+5FFFF, U+6FFFE, U+6FFFF, U+7FFFE,
- * U+7FFFF, U+8FFFE, U+8FFFF, U+9FFFE, U+9FFFF, U+AFFFE, U+AFFFF, U+BFFFE, U+BFFFF, U+CFFFE, U+CFFFF,
- * U+DFFFE, U+DFFFF, U+EFFFE, U+EFFFF, U+FFFFE, U+FFFFF, U+10FFFE, and U+10FFFF are parse errors.
- * (These are all control characters or permanently undefined Unicode characters.)
- */
- // Check PCRE is loaded.
- $count = preg_match_all(
- '/(?:
- [\x01-\x08\x0B\x0E-\x1F\x7F] # U+0001 to U+0008, U+000B, U+000E to U+001F and U+007F
- |
- \xC2[\x80-\x9F] # U+0080 to U+009F
- |
- \xED(?:\xA0[\x80-\xFF]|[\xA1-\xBE][\x00-\xFF]|\xBF[\x00-\xBF]) # U+D800 to U+DFFFF
- |
- \xEF\xB7[\x90-\xAF] # U+FDD0 to U+FDEF
- |
- \xEF\xBF[\xBE\xBF] # U+FFFE and U+FFFF
- |
- [\xF0-\xF4][\x8F-\xBF]\xBF[\xBE\xBF] # U+nFFFE and U+nFFFF (1 <= n <= 10_{16})
- )/x', $data, $matches);
- for ($i = 0; $i < $count; ++$i) {
- $errors[] = 'invalid-codepoint';
- }
-
- return $errors;
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/masterminds/html5/src/HTML5/Serializer/HTML5Entities.php b/fixtures/symfony_5_local_deps/vendor/masterminds/html5/src/HTML5/Serializer/HTML5Entities.php
deleted file mode 100644
index e9421a12d..000000000
--- a/fixtures/symfony_5_local_deps/vendor/masterminds/html5/src/HTML5/Serializer/HTML5Entities.php
+++ /dev/null
@@ -1,1533 +0,0 @@
- '	',
- "\n" => '
',
- '!' => '!',
- '"' => '"',
- '#' => '#',
- '$' => '$',
- '%' => '%',
- '&' => '&',
- '\'' => ''',
- '(' => '(',
- ')' => ')',
- '*' => '*',
- '+' => '+',
- ',' => ',',
- '.' => '.',
- '/' => '/',
- ':' => ':',
- ';' => ';',
- '<' => '<',
- '<⃒' => '&nvlt',
- '=' => '=',
- '=⃥' => '&bne',
- '>' => '>',
- '>⃒' => '&nvgt',
- '?' => '?',
- '@' => '@',
- '[' => '[',
- '\\' => '\',
- ']' => ']',
- '^' => '^',
- '_' => '_',
- '`' => '`',
- 'fj' => '&fjlig',
- '{' => '{',
- '|' => '|',
- '}' => '}',
- 'Â ' => ' ',
- '¡' => '¡',
- '¢' => '¢',
- '£' => '£',
- '¤' => '¤',
- 'Â¥' => '¥',
- '¦' => '¦',
- '§' => '§',
- '¨' => '¨',
- '©' => '©',
- 'ª' => 'ª',
- '«' => '«',
- '¬' => '¬',
- 'Â' => '',
- '®' => '®',
- '¯' => '¯',
- '°' => '°',
- '±' => '±',
- '²' => '²',
- '³' => '³',
- '´' => '´',
- 'µ' => 'µ',
- '¶' => '¶',
- '·' => '·',
- '¸' => '¸',
- '¹' => '¹',
- 'º' => 'º',
- '»' => '»',
- '¼' => '¼',
- '½' => '½',
- '¾' => '¾',
- '¿' => '¿',
- 'À' => 'À',
- 'Ã' => 'Á',
- 'Â' => 'Â',
- 'Ã' => 'Ã',
- 'Ä' => 'Ä',
- 'Ã…' => 'Å',
- 'Æ' => 'Æ',
- 'Ç' => 'Ç',
- 'È' => 'È',
- 'É' => 'É',
- 'Ê' => 'Ê',
- 'Ë' => 'Ë',
- 'ÃŒ' => 'Ì',
- 'Ã' => 'Í',
- 'ÃŽ' => 'Î',
- 'Ã' => 'Ï',
- 'Ã' => 'Ð',
- 'Ñ' => 'Ñ',
- 'Ã’' => 'Ò',
- 'Ó' => 'Ó',
- 'Ô' => 'Ô',
- 'Õ' => 'Õ',
- 'Ö' => 'Ö',
- '×' => '×',
- 'Ø' => 'Ø',
- 'Ù' => 'Ù',
- 'Ú' => 'Ú',
- 'Û' => 'Û',
- 'Ü' => 'Ü',
- 'Ã' => 'Ý',
- 'Þ' => 'Þ',
- 'ß' => 'ß',
- 'Ã ' => 'à',
- 'á' => 'á',
- 'â' => 'â',
- 'ã' => 'ã',
- 'ä' => 'ä',
- 'Ã¥' => 'å',
- 'æ' => 'æ',
- 'ç' => 'ç',
- 'è' => 'è',
- 'é' => 'é',
- 'ê' => 'ê',
- 'ë' => 'ë',
- 'ì' => 'ì',
- 'Ã' => 'í',
- 'î' => 'î',
- 'ï' => 'ï',
- 'ð' => 'ð',
- 'ñ' => 'ñ',
- 'ò' => 'ò',
- 'ó' => 'ó',
- 'ô' => 'ô',
- 'õ' => 'õ',
- 'ö' => 'ö',
- '÷' => '÷',
- 'ø' => 'ø',
- 'ù' => 'ù',
- 'ú' => 'ú',
- 'û' => 'û',
- 'ü' => 'ü',
- 'ý' => 'ý',
- 'þ' => 'þ',
- 'ÿ' => 'ÿ',
- 'Ä€' => 'Ā',
- 'Ä' => 'ā',
- 'Ä‚' => 'Ă',
- 'ă' => 'ă',
- 'Ä„' => 'Ą',
- 'Ä…' => 'ą',
- 'Ć' => 'Ć',
- 'ć' => 'ć',
- 'Ĉ' => 'Ĉ',
- 'ĉ' => 'ĉ',
- 'ÄŠ' => 'Ċ',
- 'Ä‹' => 'ċ',
- 'ÄŒ' => 'Č',
- 'Ä' => 'č',
- 'ÄŽ' => 'Ď',
- 'Ä' => 'ď',
- 'Ä' => 'Đ',
- 'Ä‘' => 'đ',
- 'Ä’' => 'Ē',
- 'Ä“' => 'ē',
- 'Ä–' => 'Ė',
- 'Ä—' => 'ė',
- 'Ę' => 'Ę',
- 'Ä™' => 'ę',
- 'Äš' => 'Ě',
- 'Ä›' => 'ě',
- 'Äœ' => 'Ĝ',
- 'Ä' => 'ĝ',
- 'Äž' => 'Ğ',
- 'ÄŸ' => 'ğ',
- 'Ä ' => 'Ġ',
- 'Ä¡' => 'ġ',
- 'Ä¢' => 'Ģ',
- 'Ĥ' => 'Ĥ',
- 'Ä¥' => 'ĥ',
- 'Ħ' => 'Ħ',
- 'ħ' => 'ħ',
- 'Ĩ' => 'Ĩ',
- 'Ä©' => 'ĩ',
- 'Ī' => 'Ī',
- 'Ä«' => 'ī',
- 'Ä®' => 'Į',
- 'į' => 'į',
- 'İ' => 'İ',
- 'ı' => 'ı',
- 'IJ' => 'IJ',
- 'ij' => 'ij',
- 'Ä´' => 'Ĵ',
- 'ĵ' => 'ĵ',
- 'Ķ' => 'Ķ',
- 'Ä·' => 'ķ',
- 'ĸ' => 'ĸ',
- 'Ĺ' => 'Ĺ',
- 'ĺ' => 'ĺ',
- 'Ä»' => 'Ļ',
- 'ļ' => 'ļ',
- 'Ľ' => 'Ľ',
- 'ľ' => 'ľ',
- 'Ä¿' => 'Ŀ',
- 'Å€' => 'ŀ',
- 'Å' => 'Ł',
- 'Å‚' => 'ł',
- 'Ń' => 'Ń',
- 'Å„' => 'ń',
- 'Å…' => 'Ņ',
- 'ņ' => 'ņ',
- 'Ň' => 'Ň',
- 'ň' => 'ň',
- 'ʼn' => 'ʼn',
- 'ÅŠ' => 'Ŋ',
- 'Å‹' => 'ŋ',
- 'ÅŒ' => 'Ō',
- 'Å' => 'ō',
- 'Å' => 'Ő',
- 'Å‘' => 'ő',
- 'Å’' => 'Œ',
- 'Å“' => 'œ',
- 'Å”' => 'Ŕ',
- 'Å•' => 'ŕ',
- 'Å–' => 'Ŗ',
- 'Å—' => 'ŗ',
- 'Ř' => 'Ř',
- 'Å™' => 'ř',
- 'Åš' => 'Ś',
- 'Å›' => 'ś',
- 'Åœ' => 'Ŝ',
- 'Å' => 'ŝ',
- 'Åž' => 'Ş',
- 'ÅŸ' => 'ş',
- 'Å ' => 'Š',
- 'Å¡' => 'š',
- 'Å¢' => 'Ţ',
- 'Å£' => 'ţ',
- 'Ť' => 'Ť',
- 'Å¥' => 'ť',
- 'Ŧ' => 'Ŧ',
- 'ŧ' => 'ŧ',
- 'Ũ' => 'Ũ',
- 'Å©' => 'ũ',
- 'Ū' => 'Ū',
- 'Å«' => 'ū',
- 'Ŭ' => 'Ŭ',
- 'Å' => 'ŭ',
- 'Å®' => 'Ů',
- 'ů' => 'ů',
- 'Ű' => 'Ű',
- 'ű' => 'ű',
- 'Ų' => 'Ų',
- 'ų' => 'ų',
- 'Å´' => 'Ŵ',
- 'ŵ' => 'ŵ',
- 'Ŷ' => 'Ŷ',
- 'Å·' => 'ŷ',
- 'Ÿ' => 'Ÿ',
- 'Ź' => 'Ź',
- 'ź' => 'ź',
- 'Å»' => 'Ż',
- 'ż' => 'ż',
- 'Ž' => 'Ž',
- 'ž' => 'ž',
- 'Æ’' => 'ƒ',
- 'Ƶ' => 'Ƶ',
- 'ǵ' => 'ǵ',
- 'È·' => 'ȷ',
- 'ˆ' => 'ˆ',
- 'ˇ' => 'ˇ',
- '˘' => '˘',
- 'Ë™' => '˙',
- 'Ëš' => '˚',
- 'Ë›' => '˛',
- 'Ëœ' => '˜',
- 'Ë' => '˝',
- 'Ì‘' => '̑',
- 'Α' => 'Α',
- 'Î’' => 'Β',
- 'Γ' => 'Γ',
- 'Δ' => 'Δ',
- 'Ε' => 'Ε',
- 'Ζ' => 'Ζ',
- 'Η' => 'Η',
- 'Θ' => 'Θ',
- 'Ι' => 'Ι',
- 'Κ' => 'Κ',
- 'Λ' => 'Λ',
- 'Μ' => 'Μ',
- 'Î' => 'Ν',
- 'Ξ' => 'Ξ',
- 'Ο' => 'Ο',
- 'Î ' => 'Π',
- 'Ρ' => 'Ρ',
- 'Σ' => 'Σ',
- 'Τ' => 'Τ',
- 'Î¥' => 'Υ',
- 'Φ' => 'Φ',
- 'Χ' => 'Χ',
- 'Ψ' => 'Ψ',
- 'Ω' => 'Ω',
- 'α' => 'α',
- 'β' => 'β',
- 'γ' => 'γ',
- 'δ' => 'δ',
- 'ε' => 'ε',
- 'ζ' => 'ζ',
- 'η' => 'η',
- 'θ' => 'θ',
- 'ι' => 'ι',
- 'κ' => 'κ',
- 'λ' => 'λ',
- 'μ' => 'μ',
- 'ν' => 'ν',
- 'ξ' => 'ξ',
- 'ο' => 'ο',
- 'Ï€' => 'π',
- 'Ï' => 'ρ',
- 'Ï‚' => 'ς',
- 'σ' => 'σ',
- 'Ï„' => 'τ',
- 'Ï…' => 'υ',
- 'φ' => 'φ',
- 'χ' => 'χ',
- 'ψ' => 'ψ',
- 'ω' => 'ω',
- 'Ï‘' => 'ϑ',
- 'Ï’' => 'ϒ',
- 'Ï•' => 'ϕ',
- 'Ï–' => 'ϖ',
- 'Ïœ' => 'Ϝ',
- 'Ï' => 'ϝ',
- 'ϰ' => 'ϰ',
- 'ϱ' => 'ϱ',
- 'ϵ' => 'ϵ',
- '϶' => '϶',
- 'Ð' => 'Ё',
- 'Ђ' => 'Ђ',
- 'Ѓ' => 'Ѓ',
- 'Є' => 'Є',
- 'Ð…' => 'Ѕ',
- 'І' => 'І',
- 'Ї' => 'Ї',
- 'Ј' => 'Ј',
- 'Љ' => 'Љ',
- 'Њ' => 'Њ',
- 'Ћ' => 'Ћ',
- 'ÐŒ' => 'Ќ',
- 'ÐŽ' => 'Ў',
- 'Ð' => 'Џ',
- 'Ð' => 'А',
- 'Б' => 'Б',
- 'Ð’' => 'В',
- 'Г' => 'Г',
- 'Д' => 'Д',
- 'Е' => 'Е',
- 'Ж' => 'Ж',
- 'З' => 'З',
- 'И' => 'И',
- 'Й' => 'Й',
- 'К' => 'К',
- 'Л' => 'Л',
- 'М' => 'М',
- 'Ð' => 'Н',
- 'О' => 'О',
- 'П' => 'П',
- 'Ð ' => 'Р',
- 'С' => 'С',
- 'Т' => 'Т',
- 'У' => 'У',
- 'Ф' => 'Ф',
- 'Ð¥' => 'Х',
- 'Ц' => 'Ц',
- 'Ч' => 'Ч',
- 'Ш' => 'Ш',
- 'Щ' => 'Щ',
- 'Ъ' => 'Ъ',
- 'Ы' => 'Ы',
- 'Ь' => 'Ь',
- 'Ð' => 'Э',
- 'Ю' => 'Ю',
- 'Я' => 'Я',
- 'а' => 'а',
- 'б' => 'б',
- 'в' => 'в',
- 'г' => 'г',
- 'д' => 'д',
- 'е' => 'е',
- 'ж' => 'ж',
- 'з' => 'з',
- 'и' => 'и',
- 'й' => 'й',
- 'к' => 'к',
- 'л' => 'л',
- 'м' => 'м',
- 'н' => 'н',
- 'о' => 'о',
- 'п' => 'п',
- 'Ñ€' => 'р',
- 'Ñ' => 'с',
- 'Ñ‚' => 'т',
- 'у' => 'у',
- 'Ñ„' => 'ф',
- 'Ñ…' => 'х',
- 'ц' => 'ц',
- 'ч' => 'ч',
- 'ш' => 'ш',
- 'щ' => 'щ',
- 'ÑŠ' => 'ъ',
- 'Ñ‹' => 'ы',
- 'ÑŒ' => 'ь',
- 'Ñ' => 'э',
- 'ÑŽ' => 'ю',
- 'Ñ' => 'я',
- 'Ñ‘' => 'ё',
- 'Ñ’' => 'ђ',
- 'Ñ“' => 'ѓ',
- 'Ñ”' => 'є',
- 'Ñ•' => 'ѕ',
- 'Ñ–' => 'і',
- 'Ñ—' => 'ї',
- 'ј' => 'ј',
- 'Ñ™' => 'љ',
- 'Ñš' => 'њ',
- 'Ñ›' => 'ћ',
- 'Ñœ' => 'ќ',
- 'Ñž' => 'ў',
- 'ÑŸ' => 'џ',
- ' ' => ' ',
- ' ' => ' ',
- ' ' => ' ',
- ' ' => ' ',
- ' ' => ' ',
- ' ' => ' ',
- ' ' => ' ',
- ' ' => ' ',
- '​' => '​',
- '‌' => '',
- 'â€' => '',
- '‎' => '',
- 'â€' => '',
- 'â€' => '‐',
- '–' => '–',
- '—' => '—',
- '―' => '―',
- '‖' => '‖',
- '‘' => '‘',
- '’' => '’',
- '‚' => '‚',
- '“' => '“',
- 'â€' => '”',
- '„' => '„',
- '†' => '†',
- '‡' => '‡',
- '•' => '•',
- '‥' => '‥',
- '…' => '…',
- '‰' => '‰',
- '‱' => '‱',
- '′' => '′',
- '″' => '″',
- '‴' => '‴',
- '‵' => '‵',
- '‹' => '‹',
- '›' => '›',
- '‾' => '‾',
- 'â' => '⁁',
- 'âƒ' => '⁃',
- 'â„' => '⁄',
- 'â' => '⁏',
- 'â—' => '⁗',
- 'âŸ' => ' ',
- 'âŸâ€Š' => '&ThickSpace',
- 'â ' => '⁠',
- 'â¡' => '⁡',
- 'â¢' => '⁢',
- 'â£' => '⁣',
- '€' => '€',
- '⃛' => '⃛',
- '⃜' => '⃜',
- 'â„‚' => 'ℂ',
- 'â„…' => '℅',
- 'ℊ' => 'ℊ',
- 'â„‹' => 'ℋ',
- 'ℌ' => 'ℌ',
- 'â„' => 'ℍ',
- 'ℎ' => 'ℎ',
- 'â„' => 'ℏ',
- 'â„' => 'ℐ',
- 'â„‘' => 'ℑ',
- 'â„’' => 'ℒ',
- 'â„“' => 'ℓ',
- 'â„•' => 'ℕ',
- 'â„–' => '№',
- 'â„—' => '℗',
- '℘' => '℘',
- 'â„™' => 'ℙ',
- 'ℚ' => 'ℚ',
- 'â„›' => 'ℛ',
- 'ℜ' => 'ℜ',
- 'â„' => 'ℝ',
- '℞' => '℞',
- 'â„¢' => '™',
- 'ℤ' => 'ℤ',
- 'â„§' => '℧',
- 'ℨ' => 'ℨ',
- 'â„©' => '℩',
- 'ℬ' => 'ℬ',
- 'â„' => 'ℭ',
- 'ℯ' => 'ℯ',
- 'â„°' => 'ℰ',
- 'ℱ' => 'ℱ',
- 'ℳ' => 'ℳ',
- 'â„´' => 'ℴ',
- 'ℵ' => 'ℵ',
- 'â„¶' => 'ℶ',
- 'â„·' => 'ℷ',
- 'ℸ' => 'ℸ',
- 'â……' => 'ⅅ',
- 'â…†' => 'ⅆ',
- 'â…‡' => 'ⅇ',
- 'â…ˆ' => 'ⅈ',
- 'â…“' => '⅓',
- 'â…”' => '⅔',
- 'â…•' => '⅕',
- 'â…–' => '⅖',
- 'â…—' => '⅗',
- 'â…˜' => '⅘',
- 'â…™' => '⅙',
- 'â…š' => '⅚',
- 'â…›' => '⅛',
- 'â…œ' => '⅜',
- 'â…' => '⅝',
- 'â…ž' => '⅞',
- 'â†' => '←',
- '↑' => '↑',
- '→' => '→',
- '↓' => '↓',
- '↔' => '↔',
- '↕' => '↕',
- '↖' => '↖',
- '↗' => '↗',
- '↘' => '↘',
- '↙' => '↙',
- '↚' => '↚',
- '↛' => '↛',
- 'â†' => '↝',
- 'â†Ì¸' => '&nrarrw',
- '↞' => '↞',
- '↟' => '↟',
- '↠' => '↠',
- '↡' => '↡',
- '↢' => '↢',
- '↣' => '↣',
- '↤' => '↤',
- '↥' => '↥',
- '↦' => '↦',
- '↧' => '↧',
- '↩' => '↩',
- '↪' => '↪',
- '↫' => '↫',
- '↬' => '↬',
- 'â†' => '↭',
- '↮' => '↮',
- '↰' => '↰',
- '↱' => '↱',
- '↲' => '↲',
- '↳' => '↳',
- '↵' => '↵',
- '↶' => '↶',
- '↷' => '↷',
- '↺' => '↺',
- '↻' => '↻',
- '↼' => '↼',
- '↽' => '↽',
- '↾' => '↾',
- '↿' => '↿',
- '⇀' => '⇀',
- 'â‡' => '⇁',
- '⇂' => '⇂',
- '⇃' => '⇃',
- '⇄' => '⇄',
- '⇅' => '⇅',
- '⇆' => '⇆',
- '⇇' => '⇇',
- '⇈' => '⇈',
- '⇉' => '⇉',
- '⇊' => '⇊',
- '⇋' => '⇋',
- '⇌' => '⇌',
- 'â‡' => '⇍',
- '⇎' => '⇎',
- 'â‡' => '⇏',
- 'â‡' => '⇐',
- '⇑' => '⇑',
- '⇒' => '⇒',
- '⇓' => '⇓',
- '⇔' => '⇔',
- '⇕' => '⇕',
- '⇖' => '⇖',
- '⇗' => '⇗',
- '⇘' => '⇘',
- '⇙' => '⇙',
- '⇚' => '⇚',
- '⇛' => '⇛',
- 'â‡' => '⇝',
- '⇤' => '⇤',
- '⇥' => '⇥',
- '⇵' => '⇵',
- '⇽' => '⇽',
- '⇾' => '⇾',
- '⇿' => '⇿',
- '∀' => '∀',
- 'âˆ' => '∁',
- '∂' => '∂',
- '∂̸' => '&npart',
- '∃' => '∃',
- '∄' => '∄',
- '∅' => '∅',
- '∇' => '∇',
- '∈' => '∈',
- '∉' => '∉',
- '∋' => '∋',
- '∌' => '∌',
- 'âˆ' => '∏',
- 'âˆ' => '∐',
- '∑' => '∑',
- '−' => '−',
- '∓' => '∓',
- '∔' => '∔',
- '∖' => '∖',
- '∗' => '∗',
- '∘' => '∘',
- '√' => '√',
- 'âˆ' => '∝',
- '∞' => '∞',
- '∟' => '∟',
- '∠' => '∠',
- '∠⃒' => '&nang',
- '∡' => '∡',
- '∢' => '∢',
- '∣' => '∣',
- '∤' => '∤',
- '∥' => '∥',
- '∦' => '∦',
- '∧' => '∧',
- '∨' => '∨',
- '∩' => '∩',
- '∩︀' => '&caps',
- '∪' => '∪',
- '∪︀' => '&cups',
- '∫' => '∫',
- '∬' => '∬',
- 'âˆ' => '∭',
- '∮' => '∮',
- '∯' => '∯',
- '∰' => '∰',
- '∱' => '∱',
- '∲' => '∲',
- '∳' => '∳',
- '∴' => '∴',
- '∵' => '∵',
- '∶' => '∶',
- '∷' => '∷',
- '∸' => '∸',
- '∺' => '∺',
- '∻' => '∻',
- '∼' => '∼',
- '∼⃒' => '&nvsim',
- '∽' => '∽',
- '∽̱' => '&race',
- '∾' => '∾',
- '∾̳' => '&acE',
- '∿' => '∿',
- '≀' => '≀',
- 'â‰' => '≁',
- '≂' => '≂',
- '≂̸' => '&nesim',
- '≃' => '≃',
- '≄' => '≄',
- '≅' => '≅',
- '≆' => '≆',
- '≇' => '≇',
- '≈' => '≈',
- '≉' => '≉',
- '≊' => '≊',
- '≋' => '≋',
- '≋̸' => '&napid',
- '≌' => '≌',
- 'â‰' => '≍',
- 'â‰âƒ’' => '&nvap',
- '≎' => '≎',
- '≎̸' => '&nbump',
- 'â‰' => '≏',
- 'â‰Ì¸' => '&nbumpe',
- 'â‰' => '≐',
- 'â‰Ì¸' => '&nedot',
- '≑' => '≑',
- '≒' => '≒',
- '≓' => '≓',
- '≔' => '≔',
- '≕' => '≕',
- '≖' => '≖',
- '≗' => '≗',
- '≙' => '≙',
- '≚' => '≚',
- '≜' => '≜',
- '≟' => '≟',
- '≠' => '≠',
- '≡' => '≡',
- '≡⃥' => '&bnequiv',
- '≢' => '≢',
- '≤' => '≤',
- '≤⃒' => '&nvle',
- '≥' => '≥',
- '≥⃒' => '&nvge',
- '≦' => '≦',
- '≦̸' => '&nlE',
- '≧' => '≧',
- '≧̸' => '&NotGreaterFullEqual',
- '≨' => '≨',
- '≨︀' => '&lvertneqq',
- '≩' => '≩',
- '≩︀' => '&gvertneqq',
- '≪' => '≪',
- '≪̸' => '&nLtv',
- '≪⃒' => '&nLt',
- '≫' => '≫',
- '≫̸' => '&NotGreaterGreater',
- '≫⃒' => '&nGt',
- '≬' => '≬',
- 'â‰' => '≭',
- '≮' => '≮',
- '≯' => '≯',
- '≰' => '≰',
- '≱' => '≱',
- '≲' => '≲',
- '≳' => '≳',
- '≴' => '≴',
- '≵' => '≵',
- '≶' => '≶',
- '≷' => '≷',
- '≸' => '≸',
- '≹' => '≹',
- '≺' => '≺',
- '≻' => '≻',
- '≼' => '≼',
- '≽' => '≽',
- '≾' => '≾',
- '≿' => '≿',
- '≿̸' => '&NotSucceedsTilde',
- '⊀' => '⊀',
- 'âŠ' => '⊁',
- '⊂' => '⊂',
- '⊂⃒' => '&vnsub',
- '⊃' => '⊃',
- '⊃⃒' => '&nsupset',
- '⊄' => '⊄',
- '⊅' => '⊅',
- '⊆' => '⊆',
- '⊇' => '⊇',
- '⊈' => '⊈',
- '⊉' => '⊉',
- '⊊' => '⊊',
- '⊊︀' => '&vsubne',
- '⊋' => '⊋',
- '⊋︀' => '&vsupne',
- 'âŠ' => '⊍',
- '⊎' => '⊎',
- 'âŠ' => '⊏',
- 'âŠÌ¸' => '&NotSquareSubset',
- 'âŠ' => '⊐',
- 'âŠÌ¸' => '&NotSquareSuperset',
- '⊑' => '⊑',
- '⊒' => '⊒',
- '⊓' => '⊓',
- '⊓︀' => '&sqcaps',
- '⊔' => '⊔',
- '⊔︀' => '&sqcups',
- '⊕' => '⊕',
- '⊖' => '⊖',
- '⊗' => '⊗',
- '⊘' => '⊘',
- '⊙' => '⊙',
- '⊚' => '⊚',
- '⊛' => '⊛',
- 'âŠ' => '⊝',
- '⊞' => '⊞',
- '⊟' => '⊟',
- '⊠' => '⊠',
- '⊡' => '⊡',
- '⊢' => '⊢',
- '⊣' => '⊣',
- '⊤' => '⊤',
- '⊥' => '⊥',
- '⊧' => '⊧',
- '⊨' => '⊨',
- '⊩' => '⊩',
- '⊪' => '⊪',
- '⊫' => '⊫',
- '⊬' => '⊬',
- 'âŠ' => '⊭',
- '⊮' => '⊮',
- '⊯' => '⊯',
- '⊰' => '⊰',
- '⊲' => '⊲',
- '⊳' => '⊳',
- '⊴' => '⊴',
- '⊴⃒' => '&nvltrie',
- '⊵' => '⊵',
- '⊵⃒' => '&nvrtrie',
- '⊶' => '⊶',
- '⊷' => '⊷',
- '⊸' => '⊸',
- '⊹' => '⊹',
- '⊺' => '⊺',
- '⊻' => '⊻',
- '⊽' => '⊽',
- '⊾' => '⊾',
- '⊿' => '⊿',
- 'â‹€' => '⋀',
- 'â‹' => '⋁',
- 'â‹‚' => '⋂',
- '⋃' => '⋃',
- 'â‹„' => '⋄',
- 'â‹…' => '⋅',
- '⋆' => '⋆',
- '⋇' => '⋇',
- '⋈' => '⋈',
- '⋉' => '⋉',
- '⋊' => '⋊',
- 'â‹‹' => '⋋',
- '⋌' => '⋌',
- 'â‹' => '⋍',
- '⋎' => '⋎',
- 'â‹' => '⋏',
- 'â‹' => '⋐',
- 'â‹‘' => '⋑',
- 'â‹’' => '⋒',
- 'â‹“' => '⋓',
- 'â‹”' => '⋔',
- 'â‹•' => '⋕',
- 'â‹–' => '⋖',
- 'â‹—' => '⋗',
- '⋘' => '⋘',
- '⋘̸' => '&nLl',
- 'â‹™' => '⋙',
- '⋙̸' => '&nGg',
- '⋚' => '⋚',
- '⋚︀' => '&lesg',
- 'â‹›' => '⋛',
- '⋛︀' => '&gesl',
- '⋞' => '⋞',
- '⋟' => '⋟',
- 'â‹ ' => '⋠',
- 'â‹¡' => '⋡',
- 'â‹¢' => '⋢',
- 'â‹£' => '⋣',
- '⋦' => '⋦',
- 'â‹§' => '⋧',
- '⋨' => '⋨',
- 'â‹©' => '⋩',
- '⋪' => '⋪',
- 'â‹«' => '⋫',
- '⋬' => '⋬',
- 'â‹' => '⋭',
- 'â‹®' => '⋮',
- '⋯' => '⋯',
- 'â‹°' => '⋰',
- '⋱' => '⋱',
- '⋲' => '⋲',
- '⋳' => '⋳',
- 'â‹´' => '⋴',
- '⋵' => '⋵',
- '⋵̸' => '¬indot',
- 'â‹¶' => '⋶',
- 'â‹·' => '⋷',
- '⋹' => '⋹',
- '⋹̸' => '¬inE',
- '⋺' => '⋺',
- 'â‹»' => '⋻',
- '⋼' => '⋼',
- '⋽' => '⋽',
- '⋾' => '⋾',
- '⌅' => '⌅',
- '⌆' => '⌆',
- '⌈' => '⌈',
- '⌉' => '⌉',
- '⌊' => '⌊',
- '⌋' => '⌋',
- '⌌' => '⌌',
- 'âŒ' => '⌍',
- '⌎' => '⌎',
- 'âŒ' => '⌏',
- 'âŒ' => '⌐',
- '⌒' => '⌒',
- '⌓' => '⌓',
- '⌕' => '⌕',
- '⌖' => '⌖',
- '⌜' => '⌜',
- 'âŒ' => '⌝',
- '⌞' => '⌞',
- '⌟' => '⌟',
- '⌢' => '⌢',
- '⌣' => '⌣',
- 'âŒ' => '⌭',
- '⌮' => '⌮',
- '⌶' => '⌶',
- '⌽' => '⌽',
- '⌿' => '⌿',
- 'â¼' => '⍼',
- '⎰' => '⎰',
- '⎱' => '⎱',
- '⎴' => '⎴',
- '⎵' => '⎵',
- '⎶' => '⎶',
- 'âœ' => '⏜',
- 'â' => '⏝',
- 'âž' => '⏞',
- 'âŸ' => '⏟',
- 'â¢' => '⏢',
- 'â§' => '⏧',
- 'â£' => '␣',
- 'Ⓢ' => 'Ⓢ',
- '─' => '─',
- '│' => '│',
- '┌' => '┌',
- 'â”' => '┐',
- 'â””' => '└',
- '┘' => '┘',
- '├' => '├',
- '┤' => '┤',
- '┬' => '┬',
- 'â”´' => '┴',
- '┼' => '┼',
- 'â•' => '═',
- 'â•‘' => '║',
- 'â•’' => '╒',
- 'â•“' => '╓',
- 'â•”' => '╔',
- 'â••' => '╕',
- 'â•–' => '╖',
- 'â•—' => '╗',
- '╘' => '╘',
- 'â•™' => '╙',
- '╚' => '╚',
- 'â•›' => '╛',
- '╜' => '╜',
- 'â•' => '╝',
- '╞' => '╞',
- '╟' => '╟',
- 'â• ' => '╠',
- 'â•¡' => '╡',
- 'â•¢' => '╢',
- 'â•£' => '╣',
- '╤' => '╤',
- 'â•¥' => '╥',
- '╦' => '╦',
- 'â•§' => '╧',
- '╨' => '╨',
- 'â•©' => '╩',
- '╪' => '╪',
- 'â•«' => '╫',
- '╬' => '╬',
- 'â–€' => '▀',
- 'â–„' => '▄',
- 'â–ˆ' => '█',
- 'â–‘' => '░',
- 'â–’' => '▒',
- 'â–“' => '▓',
- 'â–¡' => '□',
- 'â–ª' => '▪',
- 'â–«' => '▫',
- 'â–' => '▭',
- 'â–®' => '▮',
- 'â–±' => '▱',
- 'â–³' => '△',
- 'â–´' => '▴',
- 'â–µ' => '▵',
- 'â–¸' => '▸',
- 'â–¹' => '▹',
- 'â–½' => '▽',
- 'â–¾' => '▾',
- 'â–¿' => '▿',
- 'â—‚' => '◂',
- 'â—ƒ' => '◃',
- 'â—Š' => '◊',
- 'â—‹' => '○',
- 'â—¬' => '◬',
- 'â—¯' => '◯',
- 'â—¸' => '◸',
- 'â—¹' => '◹',
- 'â—º' => '◺',
- 'â—»' => '◻',
- 'â—¼' => '◼',
- '★' => '★',
- '☆' => '☆',
- '☎' => '☎',
- '♀' => '♀',
- '♂' => '♂',
- 'â™ ' => '♠',
- '♣' => '♣',
- '♥' => '♥',
- '♦' => '♦',
- '♪' => '♪',
- 'â™' => '♭',
- 'â™®' => '♮',
- '♯' => '♯',
- '✓' => '✓',
- '✗' => '✗',
- '✠' => '✠',
- '✶' => '✶',
- 'â˜' => '❘',
- 'â²' => '❲',
- 'â³' => '❳',
- '⟈' => '⟈',
- '⟉' => '⟉',
- '⟦' => '⟦',
- '⟧' => '⟧',
- '⟨' => '⟨',
- '⟩' => '⟩',
- '⟪' => '⟪',
- '⟫' => '⟫',
- '⟬' => '⟬',
- 'âŸ' => '⟭',
- '⟵' => '⟵',
- '⟶' => '⟶',
- '⟷' => '⟷',
- '⟸' => '⟸',
- '⟹' => '⟹',
- '⟺' => '⟺',
- '⟼' => '⟼',
- '⟿' => '⟿',
- '⤂' => '⤂',
- '⤃' => '⤃',
- '⤄' => '⤄',
- '⤅' => '⤅',
- '⤌' => '⤌',
- 'â¤' => '⤍',
- '⤎' => '⤎',
- 'â¤' => '⤏',
- 'â¤' => '⤐',
- '⤑' => '⤑',
- '⤒' => '⤒',
- '⤓' => '⤓',
- '⤖' => '⤖',
- '⤙' => '⤙',
- '⤚' => '⤚',
- '⤛' => '⤛',
- '⤜' => '⤜',
- 'â¤' => '⤝',
- '⤞' => '⤞',
- '⤟' => '⤟',
- '⤠' => '⤠',
- '⤣' => '⤣',
- '⤤' => '⤤',
- '⤥' => '⤥',
- '⤦' => '⤦',
- '⤧' => '⤧',
- '⤨' => '⤨',
- '⤩' => '⤩',
- '⤪' => '⤪',
- '⤳' => '⤳',
- '⤳̸' => '&nrarrc',
- '⤵' => '⤵',
- '⤶' => '⤶',
- '⤷' => '⤷',
- '⤸' => '⤸',
- '⤹' => '⤹',
- '⤼' => '⤼',
- '⤽' => '⤽',
- '⥅' => '⥅',
- '⥈' => '⥈',
- '⥉' => '⥉',
- '⥊' => '⥊',
- '⥋' => '⥋',
- '⥎' => '⥎',
- 'â¥' => '⥏',
- 'â¥' => '⥐',
- '⥑' => '⥑',
- '⥒' => '⥒',
- '⥓' => '⥓',
- '⥔' => '⥔',
- '⥕' => '⥕',
- '⥖' => '⥖',
- '⥗' => '⥗',
- '⥘' => '⥘',
- '⥙' => '⥙',
- '⥚' => '⥚',
- '⥛' => '⥛',
- '⥜' => '⥜',
- 'â¥' => '⥝',
- '⥞' => '⥞',
- '⥟' => '⥟',
- '⥠' => '⥠',
- '⥡' => '⥡',
- '⥢' => '⥢',
- '⥣' => '⥣',
- '⥤' => '⥤',
- '⥥' => '⥥',
- '⥦' => '⥦',
- '⥧' => '⥧',
- '⥨' => '⥨',
- '⥩' => '⥩',
- '⥪' => '⥪',
- '⥫' => '⥫',
- '⥬' => '⥬',
- 'â¥' => '⥭',
- '⥮' => '⥮',
- '⥯' => '⥯',
- '⥰' => '⥰',
- '⥱' => '⥱',
- '⥲' => '⥲',
- '⥳' => '⥳',
- '⥴' => '⥴',
- '⥵' => '⥵',
- '⥶' => '⥶',
- '⥸' => '⥸',
- '⥹' => '⥹',
- '⥻' => '⥻',
- '⥼' => '⥼',
- '⥽' => '⥽',
- '⥾' => '⥾',
- '⥿' => '⥿',
- '⦅' => '⦅',
- '⦆' => '⦆',
- '⦋' => '⦋',
- '⦌' => '⦌',
- 'â¦' => '⦍',
- '⦎' => '⦎',
- 'â¦' => '⦏',
- 'â¦' => '⦐',
- '⦑' => '⦑',
- '⦒' => '⦒',
- '⦓' => '⦓',
- '⦔' => '⦔',
- '⦕' => '⦕',
- '⦖' => '⦖',
- '⦚' => '⦚',
- '⦜' => '⦜',
- 'â¦' => '⦝',
- '⦤' => '⦤',
- '⦥' => '⦥',
- '⦦' => '⦦',
- '⦧' => '⦧',
- '⦨' => '⦨',
- '⦩' => '⦩',
- '⦪' => '⦪',
- '⦫' => '⦫',
- '⦬' => '⦬',
- 'â¦' => '⦭',
- '⦮' => '⦮',
- '⦯' => '⦯',
- '⦰' => '⦰',
- '⦱' => '⦱',
- '⦲' => '⦲',
- '⦳' => '⦳',
- '⦴' => '⦴',
- '⦵' => '⦵',
- '⦶' => '⦶',
- '⦷' => '⦷',
- '⦹' => '⦹',
- '⦻' => '⦻',
- '⦼' => '⦼',
- '⦾' => '⦾',
- '⦿' => '⦿',
- 'â§€' => '⧀',
- 'â§' => '⧁',
- 'â§‚' => '⧂',
- '⧃' => '⧃',
- 'â§„' => '⧄',
- 'â§…' => '⧅',
- '⧉' => '⧉',
- 'â§' => '⧍',
- 'â§Ž' => '⧎',
- 'â§' => '⧏',
- 'â§Ì¸' => '&NotLeftTriangleBar',
- 'â§' => '⧐',
- 'â§Ì¸' => '&NotRightTriangleBar',
- 'â§œ' => '⧜',
- 'â§' => '⧝',
- 'â§ž' => '⧞',
- 'â§£' => '⧣',
- '⧤' => '⧤',
- 'â§¥' => '⧥',
- 'â§«' => '⧫',
- 'â§´' => '⧴',
- 'â§¶' => '⧶',
- '⨀' => '⨀',
- 'â¨' => '⨁',
- '⨂' => '⨂',
- '⨄' => '⨄',
- '⨆' => '⨆',
- '⨌' => '⨌',
- 'â¨' => '⨍',
- 'â¨' => '⨐',
- '⨑' => '⨑',
- '⨒' => '⨒',
- '⨓' => '⨓',
- '⨔' => '⨔',
- '⨕' => '⨕',
- '⨖' => '⨖',
- '⨗' => '⨗',
- '⨢' => '⨢',
- '⨣' => '⨣',
- '⨤' => '⨤',
- '⨥' => '⨥',
- '⨦' => '⨦',
- '⨧' => '⨧',
- '⨩' => '⨩',
- '⨪' => '⨪',
- 'â¨' => '⨭',
- '⨮' => '⨮',
- '⨯' => '⨯',
- '⨰' => '⨰',
- '⨱' => '⨱',
- '⨳' => '⨳',
- '⨴' => '⨴',
- '⨵' => '⨵',
- '⨶' => '⨶',
- '⨷' => '⨷',
- '⨸' => '⨸',
- '⨹' => '⨹',
- '⨺' => '⨺',
- '⨻' => '⨻',
- '⨼' => '⨼',
- '⨿' => '⨿',
- 'â©€' => '⩀',
- 'â©‚' => '⩂',
- '⩃' => '⩃',
- 'â©„' => '⩄',
- 'â©…' => '⩅',
- '⩆' => '⩆',
- '⩇' => '⩇',
- '⩈' => '⩈',
- '⩉' => '⩉',
- '⩊' => '⩊',
- 'â©‹' => '⩋',
- '⩌' => '⩌',
- 'â©' => '⩍',
- 'â©' => '⩐',
- 'â©“' => '⩓',
- 'â©”' => '⩔',
- 'â©•' => '⩕',
- 'â©–' => '⩖',
- 'â©—' => '⩗',
- '⩘' => '⩘',
- '⩚' => '⩚',
- 'â©›' => '⩛',
- '⩜' => '⩜',
- 'â©' => '⩝',
- '⩟' => '⩟',
- '⩦' => '⩦',
- '⩪' => '⩪',
- 'â©' => '⩭',
- 'â©Ì¸' => '&ncongdot',
- 'â©®' => '⩮',
- '⩯' => '⩯',
- 'â©°' => '⩰',
- '⩰̸' => '&napE',
- '⩱' => '⩱',
- '⩲' => '⩲',
- '⩳' => '⩳',
- 'â©´' => '⩴',
- '⩵' => '⩵',
- 'â©·' => '⩷',
- '⩸' => '⩸',
- '⩹' => '⩹',
- '⩺' => '⩺',
- 'â©»' => '⩻',
- '⩼' => '⩼',
- '⩽' => '⩽',
- '⩽̸' => '&nles',
- '⩾' => '⩾',
- '⩾̸' => '&nges',
- 'â©¿' => '⩿',
- '⪀' => '⪀',
- 'âª' => '⪁',
- '⪂' => '⪂',
- '⪃' => '⪃',
- '⪄' => '⪄',
- '⪅' => '⪅',
- '⪆' => '⪆',
- '⪇' => '⪇',
- '⪈' => '⪈',
- '⪉' => '⪉',
- '⪊' => '⪊',
- '⪋' => '⪋',
- '⪌' => '⪌',
- 'âª' => '⪍',
- '⪎' => '⪎',
- 'âª' => '⪏',
- 'âª' => '⪐',
- '⪑' => '⪑',
- '⪒' => '⪒',
- '⪓' => '⪓',
- '⪔' => '⪔',
- '⪕' => '⪕',
- '⪖' => '⪖',
- '⪗' => '⪗',
- '⪘' => '⪘',
- '⪙' => '⪙',
- '⪚' => '⪚',
- 'âª' => '⪝',
- '⪞' => '⪞',
- '⪟' => '⪟',
- '⪠' => '⪠',
- '⪡' => '⪡',
- '⪡̸' => '&NotNestedLessLess',
- '⪢' => '⪢',
- '⪢̸' => '&NotNestedGreaterGreater',
- '⪤' => '⪤',
- '⪥' => '⪥',
- '⪦' => '⪦',
- '⪧' => '⪧',
- '⪨' => '⪨',
- '⪩' => '⪩',
- '⪪' => '⪪',
- '⪫' => '⪫',
- '⪬' => '⪬',
- '⪬︀' => '&smtes',
- 'âª' => '⪭',
- 'âªï¸€' => '&lates',
- '⪮' => '⪮',
- '⪯' => '⪯',
- '⪯̸' => '&NotPrecedesEqual',
- '⪰' => '⪰',
- '⪰̸' => '&NotSucceedsEqual',
- '⪳' => '⪳',
- '⪴' => '⪴',
- '⪵' => '⪵',
- '⪶' => '⪶',
- '⪷' => '⪷',
- '⪸' => '⪸',
- '⪹' => '⪹',
- '⪺' => '⪺',
- '⪻' => '⪻',
- '⪼' => '⪼',
- '⪽' => '⪽',
- '⪾' => '⪾',
- '⪿' => '⪿',
- 'â«€' => '⫀',
- 'â«' => '⫁',
- 'â«‚' => '⫂',
- '⫃' => '⫃',
- 'â«„' => '⫄',
- 'â«…' => '⫅',
- '⫅̸' => '&nsubE',
- '⫆' => '⫆',
- '⫆̸' => '&nsupseteqq',
- '⫇' => '⫇',
- '⫈' => '⫈',
- 'â«‹' => '⫋',
- '⫋︀' => '&vsubnE',
- '⫌' => '⫌',
- '⫌︀' => '&varsupsetneqq',
- 'â«' => '⫏',
- 'â«' => '⫐',
- 'â«‘' => '⫑',
- 'â«’' => '⫒',
- 'â«“' => '⫓',
- 'â«”' => '⫔',
- 'â«•' => '⫕',
- 'â«–' => '⫖',
- 'â«—' => '⫗',
- '⫘' => '⫘',
- 'â«™' => '⫙',
- '⫚' => '⫚',
- 'â«›' => '⫛',
- '⫤' => '⫤',
- '⫦' => '⫦',
- 'â«§' => '⫧',
- '⫨' => '⫨',
- 'â«©' => '⫩',
- 'â««' => '⫫',
- '⫬' => '⫬',
- 'â«' => '⫭',
- 'â«®' => '⫮',
- '⫯' => '⫯',
- 'â«°' => '⫰',
- '⫱' => '⫱',
- '⫲' => '⫲',
- '⫳' => '⫳',
- '⫽︀' => '&varsupsetneqq',
- 'ff' => 'ff',
- 'ï¬' => 'fi',
- 'fl' => 'fl',
- 'ffi' => 'ffi',
- 'ffl' => 'ffl',
- 'ð’œ' => '𝒜',
- 'ð’ž' => '𝒞',
- 'ð’Ÿ' => '𝒟',
- 'ð’¢' => '𝒢',
- 'ð’¥' => '𝒥',
- 'ð’¦' => '𝒦',
- 'ð’©' => '𝒩',
- 'ð’ª' => '𝒪',
- 'ð’«' => '𝒫',
- 'ð’¬' => '𝒬',
- 'ð’®' => '𝒮',
- 'ð’¯' => '𝒯',
- 'ð’°' => '𝒰',
- 'ð’±' => '𝒱',
- 'ð’²' => '𝒲',
- 'ð’³' => '𝒳',
- 'ð’´' => '𝒴',
- 'ð’µ' => '𝒵',
- 'ð’¶' => '𝒶',
- 'ð’·' => '𝒷',
- 'ð’¸' => '𝒸',
- 'ð’¹' => '𝒹',
- 'ð’»' => '𝒻',
- 'ð’½' => '𝒽',
- 'ð’¾' => '𝒾',
- 'ð’¿' => '𝒿',
- 'ð“€' => '𝓀',
- 'ð“' => '𝓁',
- 'ð“‚' => '𝓂',
- 'ð“ƒ' => '𝓃',
- 'ð“…' => '𝓅',
- 'ð“†' => '𝓆',
- 'ð“‡' => '𝓇',
- 'ð“ˆ' => '𝓈',
- 'ð“‰' => '𝓉',
- 'ð“Š' => '𝓊',
- 'ð“‹' => '𝓋',
- 'ð“Œ' => '𝓌',
- 'ð“' => '𝓍',
- 'ð“Ž' => '𝓎',
- 'ð“' => '𝓏',
- 'ð”„' => '𝔄',
- 'ð”…' => '𝔅',
- 'ð”‡' => '𝔇',
- 'ð”ˆ' => '𝔈',
- 'ð”‰' => '𝔉',
- 'ð”Š' => '𝔊',
- 'ð”' => '𝔍',
- 'ð”Ž' => '𝔎',
- 'ð”' => '𝔏',
- 'ð”' => '𝔐',
- 'ð”‘' => '𝔑',
- 'ð”’' => '𝔒',
- 'ð”“' => '𝔓',
- 'ð””' => '𝔔',
- 'ð”–' => '𝔖',
- 'ð”—' => '𝔗',
- 'ð”˜' => '𝔘',
- 'ð”™' => '𝔙',
- 'ð”š' => '𝔚',
- 'ð”›' => '𝔛',
- 'ð”œ' => '𝔜',
- 'ð”ž' => '𝔞',
- 'ð”Ÿ' => '𝔟',
- 'ð” ' => '𝔠',
- 'ð”¡' => '𝔡',
- 'ð”¢' => '𝔢',
- 'ð”£' => '𝔣',
- 'ð”¤' => '𝔤',
- 'ð”¥' => '𝔥',
- 'ð”¦' => '𝔦',
- 'ð”§' => '𝔧',
- 'ð”¨' => '𝔨',
- 'ð”©' => '𝔩',
- 'ð”ª' => '𝔪',
- 'ð”«' => '𝔫',
- 'ð”¬' => '𝔬',
- 'ð”' => '𝔭',
- 'ð”®' => '𝔮',
- 'ð”¯' => '𝔯',
- 'ð”°' => '𝔰',
- 'ð”±' => '𝔱',
- 'ð”²' => '𝔲',
- 'ð”³' => '𝔳',
- 'ð”´' => '𝔴',
- 'ð”µ' => '𝔵',
- 'ð”¶' => '𝔶',
- 'ð”·' => '𝔷',
- 'ð”¸' => '𝔸',
- 'ð”¹' => '𝔹',
- 'ð”»' => '𝔻',
- 'ð”¼' => '𝔼',
- 'ð”½' => '𝔽',
- 'ð”¾' => '𝔾',
- 'ð•€' => '𝕀',
- 'ð•' => '𝕁',
- 'ð•‚' => '𝕂',
- 'ð•ƒ' => '𝕃',
- 'ð•„' => '𝕄',
- 'ð•†' => '𝕆',
- 'ð•Š' => '𝕊',
- 'ð•‹' => '𝕋',
- 'ð•Œ' => '𝕌',
- 'ð•' => '𝕍',
- 'ð•Ž' => '𝕎',
- 'ð•' => '𝕏',
- 'ð•' => '𝕐',
- 'ð•’' => '𝕒',
- 'ð•“' => '𝕓',
- 'ð•”' => '𝕔',
- 'ð••' => '𝕕',
- 'ð•–' => '𝕖',
- 'ð•—' => '𝕗',
- 'ð•˜' => '𝕘',
- 'ð•™' => '𝕙',
- 'ð•š' => '𝕚',
- 'ð•›' => '𝕛',
- 'ð•œ' => '𝕜',
- 'ð•' => '𝕝',
- 'ð•ž' => '𝕞',
- 'ð•Ÿ' => '𝕟',
- 'ð• ' => '𝕠',
- 'ð•¡' => '𝕡',
- 'ð•¢' => '𝕢',
- 'ð•£' => '𝕣',
- 'ð•¤' => '𝕤',
- 'ð•¥' => '𝕥',
- 'ð•¦' => '𝕦',
- 'ð•§' => '𝕧',
- 'ð•¨' => '𝕨',
- 'ð•©' => '𝕩',
- 'ð•ª' => '𝕪',
- 'ð•«' => '𝕫',
- );
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/masterminds/html5/src/HTML5/Serializer/OutputRules.php b/fixtures/symfony_5_local_deps/vendor/masterminds/html5/src/HTML5/Serializer/OutputRules.php
deleted file mode 100644
index ec467f22c..000000000
--- a/fixtures/symfony_5_local_deps/vendor/masterminds/html5/src/HTML5/Serializer/OutputRules.php
+++ /dev/null
@@ -1,553 +0,0 @@
-'http://www.w3.org/1999/xhtml',
- 'attrNamespace'=>'http://www.w3.org/1999/xhtml',
-
- 'nodeName'=>'img', 'nodeName'=>array('img', 'a'),
- 'attrName'=>'alt', 'attrName'=>array('title', 'alt'),
- ),
- */
- array(
- 'nodeNamespace' => 'http://www.w3.org/1999/xhtml',
- 'attrName' => array('href',
- 'hreflang',
- 'http-equiv',
- 'icon',
- 'id',
- 'keytype',
- 'kind',
- 'label',
- 'lang',
- 'language',
- 'list',
- 'maxlength',
- 'media',
- 'method',
- 'name',
- 'placeholder',
- 'rel',
- 'rows',
- 'rowspan',
- 'sandbox',
- 'spellcheck',
- 'scope',
- 'seamless',
- 'shape',
- 'size',
- 'sizes',
- 'span',
- 'src',
- 'srcdoc',
- 'srclang',
- 'srcset',
- 'start',
- 'step',
- 'style',
- 'summary',
- 'tabindex',
- 'target',
- 'title',
- 'type',
- 'value',
- 'width',
- 'border',
- 'charset',
- 'cite',
- 'class',
- 'code',
- 'codebase',
- 'color',
- 'cols',
- 'colspan',
- 'content',
- 'coords',
- 'data',
- 'datetime',
- 'default',
- 'dir',
- 'dirname',
- 'enctype',
- 'for',
- 'form',
- 'formaction',
- 'headers',
- 'height',
- 'accept',
- 'accept-charset',
- 'accesskey',
- 'action',
- 'align',
- 'alt',
- 'bgcolor',
- ),
- ),
- array(
- 'nodeNamespace' => 'http://www.w3.org/1999/xhtml',
- 'xpath' => 'starts-with(local-name(), \'data-\')',
- ),
- );
-
- const DOCTYPE = '';
-
- public function __construct($output, $options = array())
- {
- if (isset($options['encode_entities'])) {
- $this->encode = $options['encode_entities'];
- }
-
- $this->outputMode = static::IM_IN_HTML;
- $this->out = $output;
- $this->hasHTML5 = defined('ENT_HTML5');
- }
-
- public function addRule(array $rule)
- {
- $this->nonBooleanAttributes[] = $rule;
- }
-
- public function setTraverser(Traverser $traverser)
- {
- $this->traverser = $traverser;
-
- return $this;
- }
-
- public function unsetTraverser()
- {
- $this->traverser = null;
-
- return $this;
- }
-
- public function document($dom)
- {
- $this->doctype();
- if ($dom->documentElement) {
- foreach ($dom->childNodes as $node) {
- $this->traverser->node($node);
- }
- $this->nl();
- }
- }
-
- protected function doctype()
- {
- $this->wr(static::DOCTYPE);
- $this->nl();
- }
-
- public function element($ele)
- {
- $name = $ele->tagName;
-
- // Per spec:
- // If the element has a declared namespace in the HTML, MathML or
- // SVG namespaces, we use the lname instead of the tagName.
- if ($this->traverser->isLocalElement($ele)) {
- $name = $ele->localName;
- }
-
- // If we are in SVG or MathML there is special handling.
- // Using if/elseif instead of switch because it's faster in PHP.
- if ('svg' == $name) {
- $this->outputMode = static::IM_IN_SVG;
- $name = Elements::normalizeSvgElement($name);
- } elseif ('math' == $name) {
- $this->outputMode = static::IM_IN_MATHML;
- }
-
- $this->openTag($ele);
- if (Elements::isA($name, Elements::TEXT_RAW)) {
- foreach ($ele->childNodes as $child) {
- if ($child instanceof \DOMCharacterData) {
- $this->wr($child->data);
- } elseif ($child instanceof \DOMElement) {
- $this->element($child);
- }
- }
- } else {
- // Handle children.
- if ($ele->hasChildNodes()) {
- $this->traverser->children($ele->childNodes);
- }
-
- // Close out the SVG or MathML special handling.
- if ('svg' == $name || 'math' == $name) {
- $this->outputMode = static::IM_IN_HTML;
- }
- }
-
- // If not unary, add a closing tag.
- if (!Elements::isA($name, Elements::VOID_TAG)) {
- $this->closeTag($ele);
- }
- }
-
- /**
- * Write a text node.
- *
- * @param \DOMText $ele The text node to write.
- */
- public function text($ele)
- {
- if (isset($ele->parentNode) && isset($ele->parentNode->tagName) && Elements::isA($ele->parentNode->localName, Elements::TEXT_RAW)) {
- $this->wr($ele->data);
-
- return;
- }
-
- // FIXME: This probably needs some flags set.
- $this->wr($this->enc($ele->data));
- }
-
- public function cdata($ele)
- {
- // This encodes CDATA.
- $this->wr($ele->ownerDocument->saveXML($ele));
- }
-
- public function comment($ele)
- {
- // These produce identical output.
- // $this->wr('');
- $this->wr($ele->ownerDocument->saveXML($ele));
- }
-
- public function processorInstruction($ele)
- {
- $this->wr('')
- ->wr($ele->target)
- ->wr(' ')
- ->wr($ele->data)
- ->wr('?>');
- }
-
- /**
- * Write the namespace attributes.
- *
- * @param \DOMNode $ele The element being written.
- */
- protected function namespaceAttrs($ele)
- {
- if (!$this->xpath || $this->xpath->document !== $ele->ownerDocument) {
- $this->xpath = new \DOMXPath($ele->ownerDocument);
- }
-
- foreach ($this->xpath->query('namespace::*[not(.=../../namespace::*)]', $ele) as $nsNode) {
- if (!in_array($nsNode->nodeValue, $this->implicitNamespaces)) {
- $this->wr(' ')->wr($nsNode->nodeName)->wr('="')->wr($nsNode->nodeValue)->wr('"');
- }
- }
- }
-
- /**
- * Write the opening tag.
- *
- * Tags for HTML, MathML, and SVG are in the local name. Otherwise, use the
- * qualified name (8.3).
- *
- * @param \DOMNode $ele The element being written.
- */
- protected function openTag($ele)
- {
- $this->wr('<')->wr($this->traverser->isLocalElement($ele) ? $ele->localName : $ele->tagName);
-
- $this->attrs($ele);
- $this->namespaceAttrs($ele);
-
- if ($this->outputMode == static::IM_IN_HTML) {
- $this->wr('>');
- } // If we are not in html mode we are in SVG, MathML, or XML embedded content.
- else {
- if ($ele->hasChildNodes()) {
- $this->wr('>');
- } // If there are no children this is self closing.
- else {
- $this->wr(' />');
- }
- }
- }
-
- protected function attrs($ele)
- {
- // FIXME: Needs support for xml, xmlns, xlink, and namespaced elements.
- if (!$ele->hasAttributes()) {
- return $this;
- }
-
- // TODO: Currently, this always writes name="value", and does not do
- // value-less attributes.
- $map = $ele->attributes;
- $len = $map->length;
- for ($i = 0; $i < $len; ++$i) {
- $node = $map->item($i);
- $val = $this->enc($node->value, true);
-
- // XXX: The spec says that we need to ensure that anything in
- // the XML, XMLNS, or XLink NS's should use the canonical
- // prefix. It seems that DOM does this for us already, but there
- // may be exceptions.
- $name = $node->nodeName;
-
- // Special handling for attributes in SVG and MathML.
- // Using if/elseif instead of switch because it's faster in PHP.
- if ($this->outputMode == static::IM_IN_SVG) {
- $name = Elements::normalizeSvgAttribute($name);
- } elseif ($this->outputMode == static::IM_IN_MATHML) {
- $name = Elements::normalizeMathMlAttribute($name);
- }
-
- $this->wr(' ')->wr($name);
-
- if ((isset($val) && '' !== $val) || $this->nonBooleanAttribute($node)) {
- $this->wr('="')->wr($val)->wr('"');
- }
- }
- }
-
- protected function nonBooleanAttribute(\DOMAttr $attr)
- {
- $ele = $attr->ownerElement;
- foreach ($this->nonBooleanAttributes as $rule) {
- if (isset($rule['nodeNamespace']) && $rule['nodeNamespace'] !== $ele->namespaceURI) {
- continue;
- }
- if (isset($rule['attNamespace']) && $rule['attNamespace'] !== $attr->namespaceURI) {
- continue;
- }
- if (isset($rule['nodeName']) && !is_array($rule['nodeName']) && $rule['nodeName'] !== $ele->localName) {
- continue;
- }
- if (isset($rule['nodeName']) && is_array($rule['nodeName']) && !in_array($ele->localName, $rule['nodeName'], true)) {
- continue;
- }
- if (isset($rule['attrName']) && !is_array($rule['attrName']) && $rule['attrName'] !== $attr->localName) {
- continue;
- }
- if (isset($rule['attrName']) && is_array($rule['attrName']) && !in_array($attr->localName, $rule['attrName'], true)) {
- continue;
- }
- if (isset($rule['xpath'])) {
- $xp = $this->getXPath($attr);
- if (isset($rule['prefixes'])) {
- foreach ($rule['prefixes'] as $nsPrefix => $ns) {
- $xp->registerNamespace($nsPrefix, $ns);
- }
- }
- if (!$xp->evaluate($rule['xpath'], $attr)) {
- continue;
- }
- }
-
- return true;
- }
-
- return false;
- }
-
- private function getXPath(\DOMNode $node)
- {
- if (!$this->xpath) {
- $this->xpath = new \DOMXPath($node->ownerDocument);
- }
-
- return $this->xpath;
- }
-
- /**
- * Write the closing tag.
- *
- * Tags for HTML, MathML, and SVG are in the local name. Otherwise, use the
- * qualified name (8.3).
- *
- * @param \DOMNode $ele The element being written.
- */
- protected function closeTag($ele)
- {
- if ($this->outputMode == static::IM_IN_HTML || $ele->hasChildNodes()) {
- $this->wr('')->wr($this->traverser->isLocalElement($ele) ? $ele->localName : $ele->tagName)->wr('>');
- }
- }
-
- /**
- * Write to the output.
- *
- * @param string $text The string to put into the output
- *
- * @return $this
- */
- protected function wr($text)
- {
- fwrite($this->out, $text);
-
- return $this;
- }
-
- /**
- * Write a new line character.
- *
- * @return $this
- */
- protected function nl()
- {
- fwrite($this->out, PHP_EOL);
-
- return $this;
- }
-
- /**
- * Encode text.
- *
- * When encode is set to false, the default value, the text passed in is
- * escaped per section 8.3 of the html5 spec. For details on how text is
- * escaped see the escape() method.
- *
- * When encoding is set to true the text is converted to named character
- * references where appropriate. Section 8.1.4 Character references of the
- * html5 spec refers to using named character references. This is useful for
- * characters that can't otherwise legally be used in the text.
- *
- * The named character references are listed in section 8.5.
- *
- * @see http://www.w3.org/TR/2013/CR-html5-20130806/syntax.html#named-character-references True encoding will turn all named character references into their entities.
- * This includes such characters as +.# and many other common ones. By default
- * encoding here will just escape &'<>".
- *
- * Note, PHP 5.4+ has better html5 encoding.
- *
- * @todo Use the Entities class in php 5.3 to have html5 entities.
- *
- * @param string $text Text to encode.
- * @param bool $attribute True if we are encoding an attrubute, false otherwise.
- *
- * @return string The encoded text.
- */
- protected function enc($text, $attribute = false)
- {
- // Escape the text rather than convert to named character references.
- if (!$this->encode) {
- return $this->escape($text, $attribute);
- }
-
- // If we are in PHP 5.4+ we can use the native html5 entity functionality to
- // convert the named character references.
-
- if ($this->hasHTML5) {
- return htmlentities($text, ENT_HTML5 | ENT_SUBSTITUTE | ENT_QUOTES, 'UTF-8', false);
- } // If a version earlier than 5.4 html5 entities are not entirely handled.
- // This manually handles them.
- else {
- return strtr($text, HTML5Entities::$map);
- }
- }
-
- /**
- * Escape test.
- *
- * According to the html5 spec section 8.3 Serializing HTML fragments, text
- * within tags that are not style, script, xmp, iframe, noembed, and noframes
- * need to be properly escaped.
- *
- * The & should be converted to &, no breaking space unicode characters
- * converted to , when in attribute mode the " should be converted to
- * ", and when not in attribute mode the < and > should be converted to
- * < and >.
- *
- * @see http://www.w3.org/TR/2013/CR-html5-20130806/syntax.html#escapingString
- *
- * @param string $text Text to escape.
- * @param bool $attribute True if we are escaping an attrubute, false otherwise.
- */
- protected function escape($text, $attribute = false)
- {
- // Not using htmlspecialchars because, while it does escaping, it doesn't
- // match the requirements of section 8.5. For example, it doesn't handle
- // non-breaking spaces.
- if ($attribute) {
- $replace = array(
- '"' => '"',
- '&' => '&',
- "\xc2\xa0" => ' ',
- );
- } else {
- $replace = array(
- '<' => '<',
- '>' => '>',
- '&' => '&',
- "\xc2\xa0" => ' ',
- );
- }
-
- return strtr($text, $replace);
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/masterminds/html5/src/HTML5/Serializer/README.md b/fixtures/symfony_5_local_deps/vendor/masterminds/html5/src/HTML5/Serializer/README.md
deleted file mode 100644
index 849a47f3a..000000000
--- a/fixtures/symfony_5_local_deps/vendor/masterminds/html5/src/HTML5/Serializer/README.md
+++ /dev/null
@@ -1,33 +0,0 @@
-# The Serializer (Writer) Model
-
-The serializer roughly follows sections _8.1 Writing HTML documents_ and section
-_8.3 Serializing HTML fragments_ by converting DOMDocument, DOMDocumentFragment,
-and DOMNodeList into HTML5.
-
- [ HTML5 ] // Interface for saving.
- ||
- [ Traverser ] // Walk the DOM
- ||
- [ Rules ] // Convert DOM elements into strings.
- ||
- [ HTML5 ] // HTML5 document or fragment in text.
-
-
-## HTML5 Class
-
-Provides the top level interface for saving.
-
-## The Traverser
-
-Walks the DOM finding each element and passing it off to the output rules to
-convert to HTML5.
-
-## Output Rules
-
-The output rules are defined in the RulesInterface which can have multiple
-implementations. Currently, the OutputRules is the default implementation that
-converts a DOM as is into HTML5.
-
-## HTML5 String
-
-The output of the process it HTML5 as a string or saved to a file.
\ No newline at end of file
diff --git a/fixtures/symfony_5_local_deps/vendor/masterminds/html5/src/HTML5/Serializer/RulesInterface.php b/fixtures/symfony_5_local_deps/vendor/masterminds/html5/src/HTML5/Serializer/RulesInterface.php
deleted file mode 100644
index 69a6ecdad..000000000
--- a/fixtures/symfony_5_local_deps/vendor/masterminds/html5/src/HTML5/Serializer/RulesInterface.php
+++ /dev/null
@@ -1,99 +0,0 @@
- 'html',
- 'http://www.w3.org/1998/Math/MathML' => 'math',
- 'http://www.w3.org/2000/svg' => 'svg',
- );
-
- protected $dom;
-
- protected $options;
-
- protected $encode = false;
-
- protected $rules;
-
- protected $out;
-
- /**
- * Create a traverser.
- *
- * @param \DOMNode|\DOMNodeList $dom The document or node to traverse.
- * @param resource $out A stream that allows writing. The traverser will output into this
- * stream.
- * @param array $options An array of options for the traverser as key/value pairs. These include:
- * - encode_entities: A bool to specify if full encding should happen for all named
- * charachter references. Defaults to false which escapes &'<>".
- * - output_rules: The path to the class handling the output rules.
- */
- public function __construct($dom, $out, RulesInterface $rules, $options = array())
- {
- $this->dom = $dom;
- $this->out = $out;
- $this->rules = $rules;
- $this->options = $options;
-
- $this->rules->setTraverser($this);
- }
-
- /**
- * Tell the traverser to walk the DOM.
- *
- * @return resource $out Returns the output stream.
- */
- public function walk()
- {
- if ($this->dom instanceof \DOMDocument) {
- $this->rules->document($this->dom);
- } elseif ($this->dom instanceof \DOMDocumentFragment) {
- // Document fragments are a special case. Only the children need to
- // be serialized.
- if ($this->dom->hasChildNodes()) {
- $this->children($this->dom->childNodes);
- }
- } // If NodeList, loop
- elseif ($this->dom instanceof \DOMNodeList) {
- // If this is a NodeList of DOMDocuments this will not work.
- $this->children($this->dom);
- } // Else assume this is a DOMNode-like datastructure.
- else {
- $this->node($this->dom);
- }
-
- return $this->out;
- }
-
- /**
- * Process a node in the DOM.
- *
- * @param mixed $node A node implementing \DOMNode.
- */
- public function node($node)
- {
- // A listing of types is at http://php.net/manual/en/dom.constants.php
- switch ($node->nodeType) {
- case XML_ELEMENT_NODE:
- $this->rules->element($node);
- break;
- case XML_TEXT_NODE:
- $this->rules->text($node);
- break;
- case XML_CDATA_SECTION_NODE:
- $this->rules->cdata($node);
- break;
- case XML_PI_NODE:
- $this->rules->processorInstruction($node);
- break;
- case XML_COMMENT_NODE:
- $this->rules->comment($node);
- break;
- // Currently we don't support embedding DTDs.
- default:
- //print '';
- break;
- }
- }
-
- /**
- * Walk through all the nodes on a node list.
- *
- * @param \DOMNodeList $nl A list of child elements to walk through.
- */
- public function children($nl)
- {
- foreach ($nl as $node) {
- $this->node($node);
- }
- }
-
- /**
- * Is an element local?
- *
- * @param mixed $ele An element that implement \DOMNode.
- *
- * @return bool true if local and false otherwise.
- */
- public function isLocalElement($ele)
- {
- $uri = $ele->namespaceURI;
- if (empty($uri)) {
- return false;
- }
-
- return isset(static::$local_ns[$uri]);
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/monolog/monolog/CHANGELOG.md b/fixtures/symfony_5_local_deps/vendor/monolog/monolog/CHANGELOG.md
deleted file mode 100644
index 13bb05390..000000000
--- a/fixtures/symfony_5_local_deps/vendor/monolog/monolog/CHANGELOG.md
+++ /dev/null
@@ -1,737 +0,0 @@
-### 3.5.0 (2023-10-27)
-
- * Added ability to indent stack traces in LineFormatter via e.g. `indentStacktraces(' ')` (#1835)
- * Added ability to configure a max level name length in LineFormatter via e.g. `setMaxLevelNameLength(3)` (#1850)
- * Added support for indexed arrays (i.e. `[]` and not `{}` arrays once json serialized) containing inline linebreaks in LineFormatter (#1818)
- * Added `WithMonologChannel` attribute for integrators to use to configure autowiring (#1847)
- * Fixed log record `extra` data leaking between handlers that have handler-specific processors set (#1819)
- * Fixed LogglyHandler issue with record level filtering (#1841)
- * Fixed display_errors parsing in ErrorHandler which did not support string values (#1804)
- * Fixed bug where the previous error handler would not be restored in some cases where StreamHandler fails (#1815)
- * Fixed normalization error when normalizing incomplete classes (#1833)
-
-### 3.4.0 (2023-06-21)
-
- * Added `LoadAverageProcessor` to track one of the 1, 5 or 15min load averages (#1803)
- * Added support for priority to the `AsMonologProcessor` attribute (#1797)
- * Added `TelegramBotHandler` `topic`/`message_thread_id` support (#1802)
- * Fixed `FingersCrossedHandler` passthruLevel checking (#1801)
- * Fixed support of yearly and monthly rotation log file to rotate only once a month/year (#1805)
- * Fixed `TestHandler` method docs (#1794)
- * Fixed handling of falsey `display_errors` string values (#1804)
-
-### 3.3.1 (2023-02-06)
-
- * Fixed Logger not being serializable anymore (#1792)
-
-### 3.3.0 (2023-02-06)
-
- * Deprecated FlowdockHandler & Formatter as the flowdock service was shutdown (#1748)
- * Added `ClosureContextProcessor` to allow delaying the creation of context data by setting a Closure in context which is called when the log record is used (#1745)
- * Added an ElasticsearchHandler option to set the `op_type` to `create` instead of the default `index` (#1766)
- * Added support for enum context values in PsrLogMessageProcessor (#1773)
- * Added graylog2/gelf-php 2.x support (#1747)
- * Improved `BrowserConsoleHandler` logging to use more appropriate methods than just console.log in the browser (#1739)
- * Fixed GitProcessor not filtering correctly based on Level (#1749)
- * Fixed `WhatFailureGroupHandler` not catching errors happening inside `close()` (#1791)
- * Fixed datetime field in `GoogleCloudLoggingFormatter` (#1758)
- * Fixed infinite loop detection within Fibers (#1753)
- * Fixed `AmqpHandler->setExtraAttributes` not working with buffering handler wrappers (#1781)
-
-### 3.2.0 (2022-07-24)
-
- * Deprecated `CubeHandler` and `PHPConsoleHandler` as both projects are abandoned and those should not be used anymore (#1734)
- * Marked `Logger` `@final` as it should not be extended, prefer composition or talk to us if you are missing something
- * Added RFC 5424 level (`7` to `0`) support to `Logger::log` and `Logger::addRecord` to increase interoperability (#1723)
- * Added `SyslogFormatter` to output syslog-like files which can be consumed by tools like [lnav](https://lnav.org/) (#1689)
- * Added support for `__toString` for objects which are not json serializable in `JsonFormatter` (#1733)
- * Added `GoogleCloudLoggingFormatter` (#1719)
- * Added support for Predis 2.x (#1732)
- * Added `AmqpHandler->setExtraAttributes` to allow configuring attributes when using an AMQPExchange (#1724)
- * Fixed serialization/unserialization of handlers to make sure private properties are included (#1727)
- * Fixed allowInlineLineBreaks in LineFormatter causing issues with windows paths containing `\n` or `\r` sequences (#1720)
- * Fixed max normalization depth not being taken into account when formatting exceptions with a deep chain of previous exceptions (#1726)
- * Fixed PHP 8.2 deprecation warnings (#1722)
- * Fixed rare race condition or filesystem issue where StreamHandler is unable to create the directory the log should go into yet it exists already (#1678)
-
-### 3.1.0 (2022-06-09)
-
- * Added `$datetime` parameter to `Logger::addRecord` as low level API to allow logging into the past or future (#1682)
- * Added `Logger::useLoggingLoopDetection` to allow disabling cyclic logging detection in concurrent frameworks (#1681)
- * Fixed handling of fatal errors if callPrevious is disabled in ErrorHandler (#1670)
- * Fixed interop issue by removing the need for a return type in ProcessorInterface (#1680)
- * Marked the reusable `Monolog\Test\TestCase` class as `@internal` to make sure PHPStorm does not show it above PHPUnit, you may still use it to test your own handlers/etc though (#1677)
- * Fixed RotatingFileHandler issue when the date format contained slashes (#1671)
-
-### 3.0.0 (2022-05-10)
-
-Changes from RC1
-
-- The `Monolog\LevelName` enum does not exist anymore, use `Monolog\Level->getName()` instead.
-
-### 3.0.0-RC1 (2022-05-08)
-
-This is mostly a cleanup release offering stronger type guarantees for integrators with the
-array->object/enum changes, but there is no big new feature for end users.
-
-See [UPGRADE notes](UPGRADE.md#300) for details on all breaking changes especially if you are extending/implementing Monolog classes/interfaces.
-
-Noteworthy BC Breaks:
-
-- The minimum supported PHP version is now `8.1.0`.
-- Log records have been converted from an array to a [`Monolog\LogRecord` object](src/Monolog/LogRecord.php)
- with public (and mostly readonly) properties. e.g. instead of doing
- `$record['context']` use `$record->context`.
- In formatters or handlers if you rather need an array to work with you can use `$record->toArray()`
- to get back a Monolog 1/2 style record array. This will contain the enum values instead of enum cases
- in the `level` and `level_name` keys to be more backwards compatible and use simpler data types.
-- `FormatterInterface`, `HandlerInterface`, `ProcessorInterface`, etc. changed to contain `LogRecord $record`
- instead of `array $record` parameter types. If you want to support multiple Monolog versions this should
- be possible by type-hinting nothing, or `array|LogRecord` if you support PHP 8.0+. You can then code
- against the $record using Monolog 2 style as LogRecord implements ArrayAccess for BC.
- The interfaces do not require a `LogRecord` return type even where it would be applicable, but if you only
- support Monolog 3 in integration code I would recommend you use `LogRecord` return types wherever fitting
- to ensure forward compatibility as it may be added in Monolog 4.
-- Log levels are now enums [`Monolog\Level`](src/Monolog/Level.php) and [`Monolog\LevelName`](src/Monolog/LevelName.php)
-- Removed deprecated SwiftMailerHandler, migrate to SymfonyMailerHandler instead.
-- `ResettableInterface::reset()` now requires a void return type.
-- All properties have had types added, which may require you to do so as well if you extended
- a Monolog class and declared the same property.
-
-New deprecations:
-
-- `Logger::DEBUG`, `Logger::ERROR`, etc. are now deprecated in favor of the `Monolog\Level` enum.
- e.g. instead of `Logger::WARNING` use `Level::Warning` if you need to pass the enum case
- to Monolog or one of its handlers, or `Level::Warning->value` if you need the integer
- value equal to what `Logger::WARNING` was giving you.
-- `Logger::getLevelName()` is now deprecated.
-
-### 2.9.2 (2023-10-27)
-
- * Fixed display_errors parsing in ErrorHandler which did not support string values (#1804)
- * Fixed bug where the previous error handler would not be restored in some cases where StreamHandler fails (#1815)
- * Fixed normalization error when normalizing incomplete classes (#1833)
-
-### 2.9.1 (2023-02-06)
-
- * Fixed Logger not being serializable anymore (#1792)
-
-### 2.9.0 (2023-02-05)
-
- * Deprecated FlowdockHandler & Formatter as the flowdock service was shutdown (#1748)
- * Added support for enum context values in PsrLogMessageProcessor (#1773)
- * Added graylog2/gelf-php 2.x support (#1747)
- * Improved `BrowserConsoleHandler` logging to use more appropriate methods than just console.log in the browser (#1739)
- * Fixed `WhatFailureGroupHandler` not catching errors happening inside `close()` (#1791)
- * Fixed datetime field in `GoogleCloudLoggingFormatter` (#1758)
- * Fixed infinite loop detection within Fibers (#1753)
- * Fixed `AmqpHandler->setExtraAttributes` not working with buffering handler wrappers (#1781)
-
-### 2.8.0 (2022-07-24)
-
- * Deprecated `CubeHandler` and `PHPConsoleHandler` as both projects are abandoned and those should not be used anymore (#1734)
- * Added RFC 5424 level (`7` to `0`) support to `Logger::log` and `Logger::addRecord` to increase interoperability (#1723)
- * Added support for `__toString` for objects which are not json serializable in `JsonFormatter` (#1733)
- * Added `GoogleCloudLoggingFormatter` (#1719)
- * Added support for Predis 2.x (#1732)
- * Added `AmqpHandler->setExtraAttributes` to allow configuring attributes when using an AMQPExchange (#1724)
- * Fixed serialization/unserialization of handlers to make sure private properties are included (#1727)
- * Fixed allowInlineLineBreaks in LineFormatter causing issues with windows paths containing `\n` or `\r` sequences (#1720)
- * Fixed max normalization depth not being taken into account when formatting exceptions with a deep chain of previous exceptions (#1726)
- * Fixed PHP 8.2 deprecation warnings (#1722)
- * Fixed rare race condition or filesystem issue where StreamHandler is unable to create the directory the log should go into yet it exists already (#1678)
-
-### 2.7.0 (2022-06-09)
-
- * Added `$datetime` parameter to `Logger::addRecord` as low level API to allow logging into the past or future (#1682)
- * Added `Logger::useLoggingLoopDetection` to allow disabling cyclic logging detection in concurrent frameworks (#1681)
- * Fixed handling of fatal errors if callPrevious is disabled in ErrorHandler (#1670)
- * Marked the reusable `Monolog\Test\TestCase` class as `@internal` to make sure PHPStorm does not show it above PHPUnit, you may still use it to test your own handlers/etc though (#1677)
- * Fixed RotatingFileHandler issue when the date format contained slashes (#1671)
-
-### 2.6.0 (2022-05-10)
-
- * Deprecated `SwiftMailerHandler`, use `SymfonyMailerHandler` instead
- * Added `SymfonyMailerHandler` (#1663)
- * Added ElasticSearch 8.x support to the ElasticsearchHandler (#1662)
- * Added a way to filter/modify stack traces in LineFormatter (#1665)
- * Fixed UdpSocket not being able to reopen/reconnect after close()
- * Fixed infinite loops if a Handler is triggering logging while handling log records
-
-### 2.5.0 (2022-04-08)
-
- * Added `callType` to IntrospectionProcessor (#1612)
- * Fixed AsMonologProcessor syntax to be compatible with PHP 7.2 (#1651)
-
-### 2.4.0 (2022-03-14)
-
- * Added [`Monolog\LogRecord`](src/Monolog/LogRecord.php) interface that can be used to type-hint records like `array|\Monolog\LogRecord $record` to be forward compatible with the upcoming Monolog 3 changes
- * Added `includeStacktraces` constructor params to LineFormatter & JsonFormatter (#1603)
- * Added `persistent`, `timeout`, `writingTimeout`, `connectionTimeout`, `chunkSize` constructor params to SocketHandler and derivatives (#1600)
- * Added `AsMonologProcessor` PHP attribute which can help autowiring / autoconfiguration of processors if frameworks / integrations decide to make use of it. This is useless when used purely with Monolog (#1637)
- * Added support for keeping native BSON types as is in MongoDBFormatter (#1620)
- * Added support for a `user_agent` key in WebProcessor, disabled by default but you can use it by configuring the $extraFields you want (#1613)
- * Added support for username/userIcon in SlackWebhookHandler (#1617)
- * Added extension points to BrowserConsoleHandler (#1593)
- * Added record message/context/extra info to exceptions thrown when a StreamHandler cannot open its stream to avoid completely losing the data logged (#1630)
- * Fixed error handler signature to accept a null $context which happens with internal PHP errors (#1614)
- * Fixed a few setter methods not returning `self` (#1609)
- * Fixed handling of records going over the max Telegram message length (#1616)
-
-### 2.3.5 (2021-10-01)
-
- * Fixed regression in StreamHandler since 2.3.3 on systems with the memory_limit set to >=20GB (#1592)
-
-### 2.3.4 (2021-09-15)
-
- * Fixed support for psr/log 3.x (#1589)
-
-### 2.3.3 (2021-09-14)
-
- * Fixed memory usage when using StreamHandler and calling stream_get_contents on the resource you passed to it (#1578, #1577)
- * Fixed support for psr/log 2.x (#1587)
- * Fixed some type annotations
-
-### 2.3.2 (2021-07-23)
-
- * Fixed compatibility with PHP 7.2 - 7.4 when experiencing PCRE errors (#1568)
-
-### 2.3.1 (2021-07-14)
-
- * Fixed Utils::getClass handling of anonymous classes not being fully compatible with PHP 8 (#1563)
- * Fixed some `@inheritDoc` annotations having the wrong case
-
-### 2.3.0 (2021-07-05)
-
- * Added a ton of PHPStan type annotations as well as type aliases on Monolog\Logger for Record, Level and LevelName that you can import (#1557)
- * Added ability to customize date format when using JsonFormatter (#1561)
- * Fixed FilterHandler not calling reset on its internal handler when reset() is called on it (#1531)
- * Fixed SyslogUdpHandler not setting the timezone correctly on DateTimeImmutable instances (#1540)
- * Fixed StreamHandler thread safety - chunk size set to 2GB now to avoid interlacing when doing concurrent writes (#1553)
-
-### 2.2.0 (2020-12-14)
-
- * Added JSON_PARTIAL_OUTPUT_ON_ERROR to default json encoding flags, to avoid dropping entire context data or even records due to an invalid subset of it somewhere
- * Added setDateFormat to NormalizerFormatter (and Line/Json formatters by extension) to allow changing this after object creation
- * Added RedisPubSubHandler to log records to a Redis channel using PUBLISH
- * Added support for Elastica 7, and deprecated the $type argument of ElasticaFormatter which is not in use anymore as of Elastica 7
- * Added support for millisecond write timeouts in SocketHandler, you can now pass floats to setWritingTimeout, e.g. 0.2 is 200ms
- * Added support for unix sockets in SyslogUdpHandler (set $port to 0 to make the $host a unix socket)
- * Added handleBatch support for TelegramBotHandler
- * Added RFC5424e extended date format including milliseconds to SyslogUdpHandler
- * Added support for configuring handlers with numeric level values in strings (coming from e.g. env vars)
- * Fixed Wildfire/FirePHP/ChromePHP handling of unicode characters
- * Fixed PHP 8 issues in SyslogUdpHandler
- * Fixed internal type error when mbstring is missing
-
-### 2.1.1 (2020-07-23)
-
- * Fixed removing of json encoding options
- * Fixed type hint of $level not accepting strings in SendGridHandler and OverflowHandler
- * Fixed SwiftMailerHandler not accepting email templates with an empty subject
- * Fixed array access on null in RavenHandler
- * Fixed unique_id in WebProcessor not being disableable
-
-### 2.1.0 (2020-05-22)
-
- * Added `JSON_INVALID_UTF8_SUBSTITUTE` to default json flags, so that invalid UTF8 characters now get converted to [�](https://en.wikipedia.org/wiki/Specials_(Unicode_block)#Replacement_character) instead of being converted from ISO-8859-15 to UTF8 as it was before, which was hardly a comprehensive solution
- * Added `$ignoreEmptyContextAndExtra` option to JsonFormatter to skip empty context/extra entirely from the output
- * Added `$parseMode`, `$disableWebPagePreview` and `$disableNotification` options to TelegramBotHandler
- * Added tentative support for PHP 8
- * NormalizerFormatter::addJsonEncodeOption and removeJsonEncodeOption are now public to allow modifying default json flags
- * Fixed GitProcessor type error when there is no git repo present
- * Fixed normalization of SoapFault objects containing deeply nested objects as "detail"
- * Fixed support for relative paths in RotatingFileHandler
-
-### 2.0.2 (2019-12-20)
-
- * Fixed ElasticsearchHandler swallowing exceptions details when failing to index log records
- * Fixed normalization of SoapFault objects containing non-strings as "detail" in LineFormatter
- * Fixed formatting of resources in JsonFormatter
- * Fixed RedisHandler failing to use MULTI properly when passed a proxied Redis instance (e.g. in Symfony with lazy services)
- * Fixed FilterHandler triggering a notice when handleBatch was filtering all records passed to it
- * Fixed Turkish locale messing up the conversion of level names to their constant values
-
-### 2.0.1 (2019-11-13)
-
- * Fixed normalization of Traversables to avoid traversing them as not all of them are rewindable
- * Fixed setFormatter/getFormatter to forward to the nested handler in FilterHandler, FingersCrossedHandler, BufferHandler, OverflowHandler and SamplingHandler
- * Fixed BrowserConsoleHandler formatting when using multiple styles
- * Fixed normalization of exception codes to be always integers even for PDOException which have them as numeric strings
- * Fixed normalization of SoapFault objects containing non-strings as "detail"
- * Fixed json encoding across all handlers to always attempt recovery of non-UTF-8 strings instead of failing the whole encoding
- * Fixed ChromePHPHandler to avoid sending more data than latest Chrome versions allow in headers (4KB down from 256KB).
- * Fixed type error in BrowserConsoleHandler when the context array of log records was not associative.
-
-### 2.0.0 (2019-08-30)
-
- * BC Break: This is a major release, see [UPGRADE.md](UPGRADE.md) for details if you are coming from a 1.x release
- * BC Break: Logger methods log/debug/info/notice/warning/error/critical/alert/emergency now have explicit void return types
- * Added FallbackGroupHandler which works like the WhatFailureGroupHandler but stops dispatching log records as soon as one handler accepted it
- * Fixed support for UTF-8 when cutting strings to avoid cutting a multibyte-character in half
- * Fixed normalizers handling of exception backtraces to avoid serializing arguments in some cases
- * Fixed date timezone handling in SyslogUdpHandler
-
-### 2.0.0-beta2 (2019-07-06)
-
- * BC Break: This is a major release, see [UPGRADE.md](UPGRADE.md) for details if you are coming from a 1.x release
- * BC Break: PHP 7.2 is now the minimum required PHP version.
- * BC Break: Removed SlackbotHandler, RavenHandler and HipChatHandler, see [UPGRADE.md](UPGRADE.md) for details
- * Added OverflowHandler which will only flush log records to its nested handler when reaching a certain amount of logs (i.e. only pass through when things go really bad)
- * Added TelegramBotHandler to log records to a [Telegram](https://core.telegram.org/bots/api) bot account
- * Added support for JsonSerializable when normalizing exceptions
- * Added support for RFC3164 (outdated BSD syslog protocol) to SyslogUdpHandler
- * Added SoapFault details to formatted exceptions
- * Fixed DeduplicationHandler silently failing to start when file could not be opened
- * Fixed issue in GroupHandler and WhatFailureGroupHandler where setting multiple processors would duplicate records
- * Fixed GelfFormatter losing some data when one attachment was too long
- * Fixed issue in SignalHandler restarting syscalls functionality
- * Improved performance of LogglyHandler when sending multiple logs in a single request
-
-### 2.0.0-beta1 (2018-12-08)
-
- * BC Break: This is a major release, see [UPGRADE.md](UPGRADE.md) for details if you are coming from a 1.x release
- * BC Break: PHP 7.1 is now the minimum required PHP version.
- * BC Break: Quite a few interface changes, only relevant if you implemented your own handlers/processors/formatters
- * BC Break: Removed non-PSR-3 methods to add records, all the `add*` (e.g. `addWarning`) methods as well as `emerg`, `crit`, `err` and `warn`
- * BC Break: The record timezone is now set per Logger instance and not statically anymore
- * BC Break: There is no more default handler configured on empty Logger instances
- * BC Break: ElasticSearchHandler renamed to ElasticaHandler
- * BC Break: Various handler-specific breaks, see [UPGRADE.md](UPGRADE.md) for details
- * Added scalar type hints and return hints in all the places it was possible. Switched strict_types on for more reliability.
- * Added DateTimeImmutable support, all record datetime are now immutable, and will toString/json serialize with the correct date format, including microseconds (unless disabled)
- * Added timezone and microseconds to the default date format
- * Added SendGridHandler to use the SendGrid API to send emails
- * Added LogmaticHandler to use the Logmatic.io API to store log records
- * Added SqsHandler to send log records to an AWS SQS queue
- * Added ElasticsearchHandler to send records via the official ES library. Elastica users should now use ElasticaHandler instead of ElasticSearchHandler
- * Added NoopHandler which is similar to the NullHandle but does not prevent the bubbling of log records to handlers further down the configuration, useful for temporarily disabling a handler in configuration files
- * Added ProcessHandler to write log output to the STDIN of a given process
- * Added HostnameProcessor that adds the machine's hostname to log records
- * Added a `$dateFormat` option to the PsrLogMessageProcessor which lets you format DateTime instances nicely
- * Added support for the PHP 7.x `mongodb` extension in the MongoDBHandler
- * Fixed many minor issues in various handlers, and probably added a few regressions too
-
-### 1.26.1 (2021-05-28)
-
- * Fixed PHP 8.1 deprecation warning
-
-### 1.26.0 (2020-12-14)
-
- * Added $dateFormat and $removeUsedContextFields arguments to PsrLogMessageProcessor (backport from 2.x)
-
-### 1.25.5 (2020-07-23)
-
- * Fixed array access on null in RavenHandler
- * Fixed unique_id in WebProcessor not being disableable
-
-### 1.25.4 (2020-05-22)
-
- * Fixed GitProcessor type error when there is no git repo present
- * Fixed normalization of SoapFault objects containing deeply nested objects as "detail"
- * Fixed support for relative paths in RotatingFileHandler
-
-### 1.25.3 (2019-12-20)
-
- * Fixed formatting of resources in JsonFormatter
- * Fixed RedisHandler failing to use MULTI properly when passed a proxied Redis instance (e.g. in Symfony with lazy services)
- * Fixed FilterHandler triggering a notice when handleBatch was filtering all records passed to it
- * Fixed Turkish locale messing up the conversion of level names to their constant values
-
-### 1.25.2 (2019-11-13)
-
- * Fixed normalization of Traversables to avoid traversing them as not all of them are rewindable
- * Fixed setFormatter/getFormatter to forward to the nested handler in FilterHandler, FingersCrossedHandler, BufferHandler and SamplingHandler
- * Fixed BrowserConsoleHandler formatting when using multiple styles
- * Fixed normalization of exception codes to be always integers even for PDOException which have them as numeric strings
- * Fixed normalization of SoapFault objects containing non-strings as "detail"
- * Fixed json encoding across all handlers to always attempt recovery of non-UTF-8 strings instead of failing the whole encoding
-
-### 1.25.1 (2019-09-06)
-
- * Fixed forward-compatible interfaces to be compatible with Monolog 1.x too.
-
-### 1.25.0 (2019-09-06)
-
- * Deprecated SlackbotHandler, use SlackWebhookHandler or SlackHandler instead
- * Deprecated RavenHandler, use sentry/sentry 2.x and their Sentry\Monolog\Handler instead
- * Deprecated HipChatHandler, migrate to Slack and use SlackWebhookHandler or SlackHandler instead
- * Added forward-compatible interfaces and traits FormattableHandlerInterface, FormattableHandlerTrait, ProcessableHandlerInterface, ProcessableHandlerTrait. If you use modern PHP and want to make code compatible with Monolog 1 and 2 this can help. You will have to require at least Monolog 1.25 though.
- * Added support for RFC3164 (outdated BSD syslog protocol) to SyslogUdpHandler
- * Fixed issue in GroupHandler and WhatFailureGroupHandler where setting multiple processors would duplicate records
- * Fixed issue in SignalHandler restarting syscalls functionality
- * Fixed normalizers handling of exception backtraces to avoid serializing arguments in some cases
- * Fixed ZendMonitorHandler to work with the latest Zend Server versions
- * Fixed ChromePHPHandler to avoid sending more data than latest Chrome versions allow in headers (4KB down from 256KB).
-
-### 1.24.0 (2018-11-05)
-
- * BC Notice: If you are extending any of the Monolog's Formatters' `normalize` method, make sure you add the new `$depth = 0` argument to your function signature to avoid strict PHP warnings.
- * Added a `ResettableInterface` in order to reset/reset/clear/flush handlers and processors
- * Added a `ProcessorInterface` as an optional way to label a class as being a processor (mostly useful for autowiring dependency containers)
- * Added a way to log signals being received using Monolog\SignalHandler
- * Added ability to customize error handling at the Logger level using Logger::setExceptionHandler
- * Added InsightOpsHandler to migrate users of the LogEntriesHandler
- * Added protection to NormalizerFormatter against circular and very deep structures, it now stops normalizing at a depth of 9
- * Added capture of stack traces to ErrorHandler when logging PHP errors
- * Added RavenHandler support for a `contexts` context or extra key to forward that to Sentry's contexts
- * Added forwarding of context info to FluentdFormatter
- * Added SocketHandler::setChunkSize to override the default chunk size in case you must send large log lines to rsyslog for example
- * Added ability to extend/override BrowserConsoleHandler
- * Added SlackWebhookHandler::getWebhookUrl and SlackHandler::getToken to enable class extensibility
- * Added SwiftMailerHandler::getSubjectFormatter to enable class extensibility
- * Dropped official support for HHVM in test builds
- * Fixed normalization of exception traces when call_user_func is used to avoid serializing objects and the data they contain
- * Fixed naming of fields in Slack handler, all field names are now capitalized in all cases
- * Fixed HipChatHandler bug where slack dropped messages randomly
- * Fixed normalization of objects in Slack handlers
- * Fixed support for PHP7's Throwable in NewRelicHandler
- * Fixed race bug when StreamHandler sometimes incorrectly reported it failed to create a directory
- * Fixed table row styling issues in HtmlFormatter
- * Fixed RavenHandler dropping the message when logging exception
- * Fixed WhatFailureGroupHandler skipping processors when using handleBatch
- and implement it where possible
- * Fixed display of anonymous class names
-
-### 1.23.0 (2017-06-19)
-
- * Improved SyslogUdpHandler's support for RFC5424 and added optional `$ident` argument
- * Fixed GelfHandler truncation to be per field and not per message
- * Fixed compatibility issue with PHP <5.3.6
- * Fixed support for headless Chrome in ChromePHPHandler
- * Fixed support for latest Aws SDK in DynamoDbHandler
- * Fixed support for SwiftMailer 6.0+ in SwiftMailerHandler
-
-### 1.22.1 (2017-03-13)
-
- * Fixed lots of minor issues in the new Slack integrations
- * Fixed support for allowInlineLineBreaks in LineFormatter when formatting exception backtraces
-
-### 1.22.0 (2016-11-26)
-
- * Added SlackbotHandler and SlackWebhookHandler to set up Slack integration more easily
- * Added MercurialProcessor to add mercurial revision and branch names to log records
- * Added support for AWS SDK v3 in DynamoDbHandler
- * Fixed fatal errors occurring when normalizing generators that have been fully consumed
- * Fixed RollbarHandler to include a level (rollbar level), monolog_level (original name), channel and datetime (unix)
- * Fixed RollbarHandler not flushing records automatically, calling close() explicitly is not necessary anymore
- * Fixed SyslogUdpHandler to avoid sending empty frames
- * Fixed a few PHP 7.0 and 7.1 compatibility issues
-
-### 1.21.0 (2016-07-29)
-
- * Break: Reverted the addition of $context when the ErrorHandler handles regular php errors from 1.20.0 as it was causing issues
- * Added support for more formats in RotatingFileHandler::setFilenameFormat as long as they have Y, m and d in order
- * Added ability to format the main line of text the SlackHandler sends by explicitly setting a formatter on the handler
- * Added information about SoapFault instances in NormalizerFormatter
- * Added $handleOnlyReportedErrors option on ErrorHandler::registerErrorHandler (default true) to allow logging of all errors no matter the error_reporting level
-
-### 1.20.0 (2016-07-02)
-
- * Added FingersCrossedHandler::activate() to manually trigger the handler regardless of the activation policy
- * Added StreamHandler::getUrl to retrieve the stream's URL
- * Added ability to override addRow/addTitle in HtmlFormatter
- * Added the $context to context information when the ErrorHandler handles a regular php error
- * Deprecated RotatingFileHandler::setFilenameFormat to only support 3 formats: Y, Y-m and Y-m-d
- * Fixed WhatFailureGroupHandler to work with PHP7 throwables
- * Fixed a few minor bugs
-
-### 1.19.0 (2016-04-12)
-
- * Break: StreamHandler will not close streams automatically that it does not own. If you pass in a stream (not a path/url), then it will not close it for you. You can retrieve those using getStream() if needed
- * Added DeduplicationHandler to remove duplicate records from notifications across multiple requests, useful for email or other notifications on errors
- * Added ability to use `%message%` and other LineFormatter replacements in the subject line of emails sent with NativeMailHandler and SwiftMailerHandler
- * Fixed HipChatHandler handling of long messages
-
-### 1.18.2 (2016-04-02)
-
- * Fixed ElasticaFormatter to use more precise dates
- * Fixed GelfMessageFormatter sending too long messages
-
-### 1.18.1 (2016-03-13)
-
- * Fixed SlackHandler bug where slack dropped messages randomly
- * Fixed RedisHandler issue when using with the PHPRedis extension
- * Fixed AmqpHandler content-type being incorrectly set when using with the AMQP extension
- * Fixed BrowserConsoleHandler regression
-
-### 1.18.0 (2016-03-01)
-
- * Added optional reduction of timestamp precision via `Logger->useMicrosecondTimestamps(false)`, disabling it gets you a bit of performance boost but reduces the precision to the second instead of microsecond
- * Added possibility to skip some extra stack frames in IntrospectionProcessor if you have some library wrapping Monolog that is always adding frames
- * Added `Logger->withName` to clone a logger (keeping all handlers) with a new name
- * Added FluentdFormatter for the Fluentd unix socket protocol
- * Added HandlerWrapper base class to ease the creation of handler wrappers, just extend it and override as needed
- * Added support for replacing context sub-keys using `%context.*%` in LineFormatter
- * Added support for `payload` context value in RollbarHandler
- * Added setRelease to RavenHandler to describe the application version, sent with every log
- * Added support for `fingerprint` context value in RavenHandler
- * Fixed JSON encoding errors that would gobble up the whole log record, we now handle those more gracefully by dropping chars as needed
- * Fixed write timeouts in SocketHandler and derivatives, set to 10sec by default, lower it with `setWritingTimeout()`
- * Fixed PHP7 compatibility with regard to Exception/Throwable handling in a few places
-
-### 1.17.2 (2015-10-14)
-
- * Fixed ErrorHandler compatibility with non-Monolog PSR-3 loggers
- * Fixed SlackHandler handling to use slack functionalities better
- * Fixed SwiftMailerHandler bug when sending multiple emails they all had the same id
- * Fixed 5.3 compatibility regression
-
-### 1.17.1 (2015-08-31)
-
- * Fixed RollbarHandler triggering PHP notices
-
-### 1.17.0 (2015-08-30)
-
- * Added support for `checksum` and `release` context/extra values in RavenHandler
- * Added better support for exceptions in RollbarHandler
- * Added UidProcessor::getUid
- * Added support for showing the resource type in NormalizedFormatter
- * Fixed IntrospectionProcessor triggering PHP notices
-
-### 1.16.0 (2015-08-09)
-
- * Added IFTTTHandler to notify ifttt.com triggers
- * Added Logger::setHandlers() to allow setting/replacing all handlers
- * Added $capSize in RedisHandler to cap the log size
- * Fixed StreamHandler creation of directory to only trigger when the first log write happens
- * Fixed bug in the handling of curl failures
- * Fixed duplicate logging of fatal errors when both error and fatal error handlers are registered in monolog's ErrorHandler
- * Fixed missing fatal errors records with handlers that need to be closed to flush log records
- * Fixed TagProcessor::addTags support for associative arrays
-
-### 1.15.0 (2015-07-12)
-
- * Added addTags and setTags methods to change a TagProcessor
- * Added automatic creation of directories if they are missing for a StreamHandler to open a log file
- * Added retry functionality to Loggly, Cube and Mandrill handlers so they retry up to 5 times in case of network failure
- * Fixed process exit code being incorrectly reset to 0 if ErrorHandler::registerExceptionHandler was used
- * Fixed HTML/JS escaping in BrowserConsoleHandler
- * Fixed JSON encoding errors being silently suppressed (PHP 5.5+ only)
-
-### 1.14.0 (2015-06-19)
-
- * Added PHPConsoleHandler to send record to Chrome's PHP Console extension and library
- * Added support for objects implementing __toString in the NormalizerFormatter
- * Added support for HipChat's v2 API in HipChatHandler
- * Added Logger::setTimezone() to initialize the timezone monolog should use in case date.timezone isn't correct for your app
- * Added an option to send formatted message instead of the raw record on PushoverHandler via ->useFormattedMessage(true)
- * Fixed curl errors being silently suppressed
-
-### 1.13.1 (2015-03-09)
-
- * Fixed regression in HipChat requiring a new token to be created
-
-### 1.13.0 (2015-03-05)
-
- * Added Registry::hasLogger to check for the presence of a logger instance
- * Added context.user support to RavenHandler
- * Added HipChat API v2 support in the HipChatHandler
- * Added NativeMailerHandler::addParameter to pass params to the mail() process
- * Added context data to SlackHandler when $includeContextAndExtra is true
- * Added ability to customize the Swift_Message per-email in SwiftMailerHandler
- * Fixed SwiftMailerHandler to lazily create message instances if a callback is provided
- * Fixed serialization of INF and NaN values in Normalizer and LineFormatter
-
-### 1.12.0 (2014-12-29)
-
- * Break: HandlerInterface::isHandling now receives a partial record containing only a level key. This was always the intent and does not break any Monolog handler but is strictly speaking a BC break and you should check if you relied on any other field in your own handlers.
- * Added PsrHandler to forward records to another PSR-3 logger
- * Added SamplingHandler to wrap around a handler and include only every Nth record
- * Added MongoDBFormatter to support better storage with MongoDBHandler (it must be enabled manually for now)
- * Added exception codes in the output of most formatters
- * Added LineFormatter::includeStacktraces to enable exception stack traces in logs (uses more than one line)
- * Added $useShortAttachment to SlackHandler to minify attachment size and $includeExtra to append extra data
- * Added $host to HipChatHandler for users of private instances
- * Added $transactionName to NewRelicHandler and support for a transaction_name context value
- * Fixed MandrillHandler to avoid outputting API call responses
- * Fixed some non-standard behaviors in SyslogUdpHandler
-
-### 1.11.0 (2014-09-30)
-
- * Break: The NewRelicHandler extra and context data are now prefixed with extra_ and context_ to avoid clashes. Watch out if you have scripts reading those from the API and rely on names
- * Added WhatFailureGroupHandler to suppress any exception coming from the wrapped handlers and avoid chain failures if a logging service fails
- * Added MandrillHandler to send emails via the Mandrillapp.com API
- * Added SlackHandler to log records to a Slack.com account
- * Added FleepHookHandler to log records to a Fleep.io account
- * Added LogglyHandler::addTag to allow adding tags to an existing handler
- * Added $ignoreEmptyContextAndExtra to LineFormatter to avoid empty [] at the end
- * Added $useLocking to StreamHandler and RotatingFileHandler to enable flock() while writing
- * Added support for PhpAmqpLib in the AmqpHandler
- * Added FingersCrossedHandler::clear and BufferHandler::clear to reset them between batches in long running jobs
- * Added support for adding extra fields from $_SERVER in the WebProcessor
- * Fixed support for non-string values in PrsLogMessageProcessor
- * Fixed SwiftMailer messages being sent with the wrong date in long running scripts
- * Fixed minor PHP 5.6 compatibility issues
- * Fixed BufferHandler::close being called twice
-
-### 1.10.0 (2014-06-04)
-
- * Added Logger::getHandlers() and Logger::getProcessors() methods
- * Added $passthruLevel argument to FingersCrossedHandler to let it always pass some records through even if the trigger level is not reached
- * Added support for extra data in NewRelicHandler
- * Added $expandNewlines flag to the ErrorLogHandler to create multiple log entries when a message has multiple lines
-
-### 1.9.1 (2014-04-24)
-
- * Fixed regression in RotatingFileHandler file permissions
- * Fixed initialization of the BufferHandler to make sure it gets flushed after receiving records
- * Fixed ChromePHPHandler and FirePHPHandler's activation strategies to be more conservative
-
-### 1.9.0 (2014-04-20)
-
- * Added LogEntriesHandler to send logs to a LogEntries account
- * Added $filePermissions to tweak file mode on StreamHandler and RotatingFileHandler
- * Added $useFormatting flag to MemoryProcessor to make it send raw data in bytes
- * Added support for table formatting in FirePHPHandler via the table context key
- * Added a TagProcessor to add tags to records, and support for tags in RavenHandler
- * Added $appendNewline flag to the JsonFormatter to enable using it when logging to files
- * Added sound support to the PushoverHandler
- * Fixed multi-threading support in StreamHandler
- * Fixed empty headers issue when ChromePHPHandler received no records
- * Fixed default format of the ErrorLogHandler
-
-### 1.8.0 (2014-03-23)
-
- * Break: the LineFormatter now strips newlines by default because this was a bug, set $allowInlineLineBreaks to true if you need them
- * Added BrowserConsoleHandler to send logs to any browser's console via console.log() injection in the output
- * Added FilterHandler to filter records and only allow those of a given list of levels through to the wrapped handler
- * Added FlowdockHandler to send logs to a Flowdock account
- * Added RollbarHandler to send logs to a Rollbar account
- * Added HtmlFormatter to send prettier log emails with colors for each log level
- * Added GitProcessor to add the current branch/commit to extra record data
- * Added a Monolog\Registry class to allow easier global access to pre-configured loggers
- * Added support for the new official graylog2/gelf-php lib for GelfHandler, upgrade if you can by replacing the mlehner/gelf-php requirement
- * Added support for HHVM
- * Added support for Loggly batch uploads
- * Added support for tweaking the content type and encoding in NativeMailerHandler
- * Added $skipClassesPartials to tweak the ignored classes in the IntrospectionProcessor
- * Fixed batch request support in GelfHandler
-
-### 1.7.0 (2013-11-14)
-
- * Added ElasticSearchHandler to send logs to an Elastic Search server
- * Added DynamoDbHandler and ScalarFormatter to send logs to Amazon's Dynamo DB
- * Added SyslogUdpHandler to send logs to a remote syslogd server
- * Added LogglyHandler to send logs to a Loggly account
- * Added $level to IntrospectionProcessor so it only adds backtraces when needed
- * Added $version to LogstashFormatter to allow using the new v1 Logstash format
- * Added $appName to NewRelicHandler
- * Added configuration of Pushover notification retries/expiry
- * Added $maxColumnWidth to NativeMailerHandler to change the 70 chars default
- * Added chainability to most setters for all handlers
- * Fixed RavenHandler batch processing so it takes the message from the record with highest priority
- * Fixed HipChatHandler batch processing so it sends all messages at once
- * Fixed issues with eAccelerator
- * Fixed and improved many small things
-
-### 1.6.0 (2013-07-29)
-
- * Added HipChatHandler to send logs to a HipChat chat room
- * Added ErrorLogHandler to send logs to PHP's error_log function
- * Added NewRelicHandler to send logs to NewRelic's service
- * Added Monolog\ErrorHandler helper class to register a Logger as exception/error/fatal handler
- * Added ChannelLevelActivationStrategy for the FingersCrossedHandler to customize levels by channel
- * Added stack traces output when normalizing exceptions (json output & co)
- * Added Monolog\Logger::API constant (currently 1)
- * Added support for ChromePHP's v4.0 extension
- * Added support for message priorities in PushoverHandler, see $highPriorityLevel and $emergencyLevel
- * Added support for sending messages to multiple users at once with the PushoverHandler
- * Fixed RavenHandler's support for batch sending of messages (when behind a Buffer or FingersCrossedHandler)
- * Fixed normalization of Traversables with very large data sets, only the first 1000 items are shown now
- * Fixed issue in RotatingFileHandler when an open_basedir restriction is active
- * Fixed minor issues in RavenHandler and bumped the API to Raven 0.5.0
- * Fixed SyslogHandler issue when many were used concurrently with different facilities
-
-### 1.5.0 (2013-04-23)
-
- * Added ProcessIdProcessor to inject the PID in log records
- * Added UidProcessor to inject a unique identifier to all log records of one request/run
- * Added support for previous exceptions in the LineFormatter exception serialization
- * Added Monolog\Logger::getLevels() to get all available levels
- * Fixed ChromePHPHandler so it avoids sending headers larger than Chrome can handle
-
-### 1.4.1 (2013-04-01)
-
- * Fixed exception formatting in the LineFormatter to be more minimalistic
- * Fixed RavenHandler's handling of context/extra data, requires Raven client >0.1.0
- * Fixed log rotation in RotatingFileHandler to work with long running scripts spanning multiple days
- * Fixed WebProcessor array access so it checks for data presence
- * Fixed Buffer, Group and FingersCrossed handlers to make use of their processors
-
-### 1.4.0 (2013-02-13)
-
- * Added RedisHandler to log to Redis via the Predis library or the phpredis extension
- * Added ZendMonitorHandler to log to the Zend Server monitor
- * Added the possibility to pass arrays of handlers and processors directly in the Logger constructor
- * Added `$useSSL` option to the PushoverHandler which is enabled by default
- * Fixed ChromePHPHandler and FirePHPHandler issue when multiple instances are used simultaneously
- * Fixed header injection capability in the NativeMailHandler
-
-### 1.3.1 (2013-01-11)
-
- * Fixed LogstashFormatter to be usable with stream handlers
- * Fixed GelfMessageFormatter levels on Windows
-
-### 1.3.0 (2013-01-08)
-
- * Added PSR-3 compliance, the `Monolog\Logger` class is now an instance of `Psr\Log\LoggerInterface`
- * Added PsrLogMessageProcessor that you can selectively enable for full PSR-3 compliance
- * Added LogstashFormatter (combine with SocketHandler or StreamHandler to send logs to Logstash)
- * Added PushoverHandler to send mobile notifications
- * Added CouchDBHandler and DoctrineCouchDBHandler
- * Added RavenHandler to send data to Sentry servers
- * Added support for the new MongoClient class in MongoDBHandler
- * Added microsecond precision to log records' timestamps
- * Added `$flushOnOverflow` param to BufferHandler to flush by batches instead of losing
- the oldest entries
- * Fixed normalization of objects with cyclic references
-
-### 1.2.1 (2012-08-29)
-
- * Added new $logopts arg to SyslogHandler to provide custom openlog options
- * Fixed fatal error in SyslogHandler
-
-### 1.2.0 (2012-08-18)
-
- * Added AmqpHandler (for use with AMQP servers)
- * Added CubeHandler
- * Added NativeMailerHandler::addHeader() to send custom headers in mails
- * Added the possibility to specify more than one recipient in NativeMailerHandler
- * Added the possibility to specify float timeouts in SocketHandler
- * Added NOTICE and EMERGENCY levels to conform with RFC 5424
- * Fixed the log records to use the php default timezone instead of UTC
- * Fixed BufferHandler not being flushed properly on PHP fatal errors
- * Fixed normalization of exotic resource types
- * Fixed the default format of the SyslogHandler to avoid duplicating datetimes in syslog
-
-### 1.1.0 (2012-04-23)
-
- * Added Monolog\Logger::isHandling() to check if a handler will
- handle the given log level
- * Added ChromePHPHandler
- * Added MongoDBHandler
- * Added GelfHandler (for use with Graylog2 servers)
- * Added SocketHandler (for use with syslog-ng for example)
- * Added NormalizerFormatter
- * Added the possibility to change the activation strategy of the FingersCrossedHandler
- * Added possibility to show microseconds in logs
- * Added `server` and `referer` to WebProcessor output
-
-### 1.0.2 (2011-10-24)
-
- * Fixed bug in IE with large response headers and FirePHPHandler
-
-### 1.0.1 (2011-08-25)
-
- * Added MemoryPeakUsageProcessor and MemoryUsageProcessor
- * Added Monolog\Logger::getName() to get a logger's channel name
-
-### 1.0.0 (2011-07-06)
-
- * Added IntrospectionProcessor to get info from where the logger was called
- * Fixed WebProcessor in CLI
-
-### 1.0.0-RC1 (2011-07-01)
-
- * Initial release
diff --git a/fixtures/symfony_5_local_deps/vendor/monolog/monolog/LICENSE b/fixtures/symfony_5_local_deps/vendor/monolog/monolog/LICENSE
deleted file mode 100644
index aa2a0426c..000000000
--- a/fixtures/symfony_5_local_deps/vendor/monolog/monolog/LICENSE
+++ /dev/null
@@ -1,19 +0,0 @@
-Copyright (c) 2011-2020 Jordi Boggiano
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is furnished
-to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
diff --git a/fixtures/symfony_5_local_deps/vendor/monolog/monolog/README.md b/fixtures/symfony_5_local_deps/vendor/monolog/monolog/README.md
deleted file mode 100644
index d7151de4f..000000000
--- a/fixtures/symfony_5_local_deps/vendor/monolog/monolog/README.md
+++ /dev/null
@@ -1,120 +0,0 @@
-
-
-# Monolog - Logging for PHP [](https://github.com/Seldaek/monolog/actions)
-
-[](https://packagist.org/packages/monolog/monolog)
-[](https://packagist.org/packages/monolog/monolog)
-
->**Note** This is the **documentation for Monolog 3.x**, if you are using older releases
->see the documentation for [Monolog 2.x](https://github.com/Seldaek/monolog/blob/2.x/README.md) or [Monolog 1.x](https://github.com/Seldaek/monolog/blob/1.x/README.md)
-
-Monolog sends your logs to files, sockets, inboxes, databases and various
-web services. See the complete list of handlers below. Special handlers
-allow you to build advanced logging strategies.
-
-This library implements the [PSR-3](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md)
-interface that you can type-hint against in your own libraries to keep
-a maximum of interoperability. You can also use it in your applications to
-make sure you can always use another compatible logger at a later time.
-As of 1.11.0 Monolog public APIs will also accept PSR-3 log levels.
-Internally Monolog still uses its own level scheme since it predates PSR-3.
-
-## Installation
-
-Install the latest version with
-
-```bash
-$ composer require monolog/monolog
-```
-
-## Basic Usage
-
-```php
-pushHandler(new StreamHandler('path/to/your.log', Level::Warning));
-
-// add records to the log
-$log->warning('Foo');
-$log->error('Bar');
-```
-
-## Documentation
-
-- [Usage Instructions](doc/01-usage.md)
-- [Handlers, Formatters and Processors](doc/02-handlers-formatters-processors.md)
-- [Utility Classes](doc/03-utilities.md)
-- [Extending Monolog](doc/04-extending.md)
-- [Log Record Structure](doc/message-structure.md)
-
-## Support Monolog Financially
-
-Get supported Monolog and help fund the project with the [Tidelift Subscription](https://tidelift.com/subscription/pkg/packagist-monolog-monolog?utm_source=packagist-monolog-monolog&utm_medium=referral&utm_campaign=enterprise) or via [GitHub sponsorship](https://github.com/sponsors/Seldaek).
-
-Tidelift delivers commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use.
-
-## Third Party Packages
-
-Third party handlers, formatters and processors are
-[listed in the wiki](https://github.com/Seldaek/monolog/wiki/Third-Party-Packages). You
-can also add your own there if you publish one.
-
-## About
-
-### Requirements
-
-- Monolog `^3.0` works with PHP 8.1 or above.
-- Monolog `^2.5` works with PHP 7.2 or above.
-- Monolog `^1.25` works with PHP 5.3 up to 8.1, but is not very maintained anymore and will not receive PHP support fixes anymore.
-
-### Support
-
-Monolog 1.x support is somewhat limited at this point and only important fixes will be done. You should migrate to Monolog 2 or 3 where possible to benefit from all the latest features and fixes.
-
-### Submitting bugs and feature requests
-
-Bugs and feature request are tracked on [GitHub](https://github.com/Seldaek/monolog/issues)
-
-### Framework Integrations
-
-- Frameworks and libraries using [PSR-3](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md)
- can be used very easily with Monolog since it implements the interface.
-- [Symfony](http://symfony.com) comes out of the box with Monolog.
-- [Laravel](http://laravel.com/) comes out of the box with Monolog.
-- [Lumen](http://lumen.laravel.com/) comes out of the box with Monolog.
-- [PPI](https://github.com/ppi/framework) comes out of the box with Monolog.
-- [CakePHP](http://cakephp.org/) is usable with Monolog via the [cakephp-monolog](https://github.com/jadb/cakephp-monolog) plugin.
-- [Slim](http://www.slimframework.com/) is usable with Monolog via the [Slim-Monolog](https://github.com/Flynsarmy/Slim-Monolog) log writer.
-- [XOOPS 2.6](http://xoops.org/) comes out of the box with Monolog.
-- [Aura.Web_Project](https://github.com/auraphp/Aura.Web_Project) comes out of the box with Monolog.
-- [Nette Framework](http://nette.org/en/) is usable with Monolog via the [contributte/monolog](https://github.com/contributte/monolog) or [orisai/nette-monolog](https://github.com/orisai/nette-monolog) extensions.
-- [Proton Micro Framework](https://github.com/alexbilbie/Proton) comes out of the box with Monolog.
-- [FuelPHP](http://fuelphp.com/) comes out of the box with Monolog.
-- [Equip Framework](https://github.com/equip/framework) comes out of the box with Monolog.
-- [Yii 2](http://www.yiiframework.com/) is usable with Monolog via the [yii2-monolog](https://github.com/merorafael/yii2-monolog) or [yii2-psr-log-target](https://github.com/samdark/yii2-psr-log-target) plugins.
-- [Hawkbit Micro Framework](https://github.com/HawkBitPhp/hawkbit) comes out of the box with Monolog.
-- [SilverStripe 4](https://www.silverstripe.org/) comes out of the box with Monolog.
-- [Drupal](https://www.drupal.org/) is usable with Monolog via the [monolog](https://www.drupal.org/project/monolog) module.
-- [Aimeos ecommerce framework](https://aimeos.org/) is usable with Monolog via the [ai-monolog](https://github.com/aimeos/ai-monolog) extension.
-- [Magento](https://magento.com/) comes out of the box with Monolog.
-- [Spiral Framework](https://spiral.dev) comes out of the box with Monolog bridge.
-
-### Author
-
-Jordi Boggiano - -
-See also the list of [contributors](https://github.com/Seldaek/monolog/contributors) who participated in this project.
-
-### License
-
-Monolog is licensed under the MIT License - see the [LICENSE](LICENSE) file for details
-
-### Acknowledgements
-
-This library is heavily inspired by Python's [Logbook](https://logbook.readthedocs.io/en/stable/)
-library, although most concepts have been adjusted to fit to the PHP world.
diff --git a/fixtures/symfony_5_local_deps/vendor/monolog/monolog/composer.json b/fixtures/symfony_5_local_deps/vendor/monolog/monolog/composer.json
deleted file mode 100644
index 4ccd07211..000000000
--- a/fixtures/symfony_5_local_deps/vendor/monolog/monolog/composer.json
+++ /dev/null
@@ -1,77 +0,0 @@
-{
- "name": "monolog/monolog",
- "description": "Sends your logs to files, sockets, inboxes, databases and various web services",
- "keywords": ["log", "logging", "psr-3"],
- "homepage": "https://github.com/Seldaek/monolog",
- "type": "library",
- "license": "MIT",
- "authors": [
- {
- "name": "Jordi Boggiano",
- "email": "j.boggiano@seld.be",
- "homepage": "https://seld.be"
- }
- ],
- "require": {
- "php": ">=8.1",
- "psr/log": "^2.0 || ^3.0"
- },
- "require-dev": {
- "ext-json": "*",
- "aws/aws-sdk-php": "^3.0",
- "doctrine/couchdb": "~1.0@dev",
- "elasticsearch/elasticsearch": "^7 || ^8",
- "graylog2/gelf-php": "^1.4.2 || ^2.0",
- "guzzlehttp/guzzle": "^7.4.5",
- "guzzlehttp/psr7": "^2.2",
- "mongodb/mongodb": "^1.8",
- "php-amqplib/php-amqplib": "~2.4 || ^3",
- "phpstan/phpstan": "^1.9",
- "phpstan/phpstan-deprecation-rules": "^1.0",
- "phpstan/phpstan-strict-rules": "^1.4",
- "phpunit/phpunit": "^10.1",
- "predis/predis": "^1.1 || ^2",
- "ruflin/elastica": "^7",
- "symfony/mailer": "^5.4 || ^6",
- "symfony/mime": "^5.4 || ^6"
- },
- "suggest": {
- "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server",
- "doctrine/couchdb": "Allow sending log messages to a CouchDB server",
- "ruflin/elastica": "Allow sending log messages to an Elastic Search server",
- "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client",
- "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib",
- "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)",
- "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)",
- "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)",
- "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB",
- "rollbar/rollbar": "Allow sending log messages to Rollbar",
- "ext-mbstring": "Allow to work properly with unicode symbols",
- "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)",
- "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler",
- "ext-openssl": "Required to send log messages using SSL"
- },
- "autoload": {
- "psr-4": {"Monolog\\": "src/Monolog"}
- },
- "autoload-dev": {
- "psr-4": {"Monolog\\": "tests/Monolog"}
- },
- "provide": {
- "psr/log-implementation": "3.0.0"
- },
- "extra": {
- "branch-alias": {
- "dev-main": "3.x-dev"
- }
- },
- "scripts": {
- "test": "@php vendor/bin/phpunit",
- "phpstan": "@php vendor/bin/phpstan analyse"
- },
- "config": {
- "lock": false,
- "sort-packages": true,
- "platform-check": false
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/monolog/monolog/src/Monolog/Attribute/AsMonologProcessor.php b/fixtures/symfony_5_local_deps/vendor/monolog/monolog/src/Monolog/Attribute/AsMonologProcessor.php
deleted file mode 100644
index c519e0537..000000000
--- a/fixtures/symfony_5_local_deps/vendor/monolog/monolog/src/Monolog/Attribute/AsMonologProcessor.php
+++ /dev/null
@@ -1,38 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Monolog\Attribute;
-
-/**
- * A reusable attribute to help configure a class or a method as a processor.
- *
- * Using it offers no guarantee: it needs to be leveraged by a Monolog third-party consumer.
- *
- * Using it with the Monolog library only has no effect at all: processors should still be turned into a callable if
- * needed and manually pushed to the loggers and to the processable handlers.
- */
-#[\Attribute(\Attribute::TARGET_CLASS | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
-class AsMonologProcessor
-{
- /**
- * @param string|null $channel The logging channel the processor should be pushed to.
- * @param string|null $handler The handler the processor should be pushed to.
- * @param string|null $method The method that processes the records (if the attribute is used at the class level).
- * @param int|null $priority The priority of the processor so the order can be determined.
- */
- public function __construct(
- public readonly ?string $channel = null,
- public readonly ?string $handler = null,
- public readonly ?string $method = null,
- public readonly ?int $priority = null
- ) {
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/monolog/monolog/src/Monolog/DateTimeImmutable.php b/fixtures/symfony_5_local_deps/vendor/monolog/monolog/src/Monolog/DateTimeImmutable.php
deleted file mode 100644
index 274b73ea1..000000000
--- a/fixtures/symfony_5_local_deps/vendor/monolog/monolog/src/Monolog/DateTimeImmutable.php
+++ /dev/null
@@ -1,46 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Monolog;
-
-use DateTimeZone;
-
-/**
- * Overrides default json encoding of date time objects
- *
- * @author Menno Holtkamp
- * @author Jordi Boggiano
- */
-class DateTimeImmutable extends \DateTimeImmutable implements \JsonSerializable
-{
- private bool $useMicroseconds;
-
- public function __construct(bool $useMicroseconds, ?DateTimeZone $timezone = null)
- {
- $this->useMicroseconds = $useMicroseconds;
-
- parent::__construct('now', $timezone);
- }
-
- public function jsonSerialize(): string
- {
- if ($this->useMicroseconds) {
- return $this->format('Y-m-d\TH:i:s.uP');
- }
-
- return $this->format('Y-m-d\TH:i:sP');
- }
-
- public function __toString(): string
- {
- return $this->jsonSerialize();
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/monolog/monolog/src/Monolog/ErrorHandler.php b/fixtures/symfony_5_local_deps/vendor/monolog/monolog/src/Monolog/ErrorHandler.php
deleted file mode 100644
index 08d414b34..000000000
--- a/fixtures/symfony_5_local_deps/vendor/monolog/monolog/src/Monolog/ErrorHandler.php
+++ /dev/null
@@ -1,279 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Monolog;
-
-use Closure;
-use Psr\Log\LoggerInterface;
-use Psr\Log\LogLevel;
-
-/**
- * Monolog error handler
- *
- * A facility to enable logging of runtime errors, exceptions and fatal errors.
- *
- * Quick setup: ErrorHandler::register($logger);
- *
- * @author Jordi Boggiano
- */
-class ErrorHandler
-{
- private Closure|null $previousExceptionHandler = null;
-
- /** @var array an array of class name to LogLevel::* constant mapping */
- private array $uncaughtExceptionLevelMap = [];
-
- /** @var Closure|true|null */
- private Closure|bool|null $previousErrorHandler = null;
-
- /** @var array an array of E_* constant to LogLevel::* constant mapping */
- private array $errorLevelMap = [];
-
- private bool $handleOnlyReportedErrors = true;
-
- private bool $hasFatalErrorHandler = false;
-
- private string $fatalLevel = LogLevel::ALERT;
-
- private string|null $reservedMemory = null;
-
- /** @var ?array{type: int, message: string, file: string, line: int, trace: mixed} */
- private array|null $lastFatalData = null;
-
- private const FATAL_ERRORS = [E_ERROR, E_PARSE, E_CORE_ERROR, E_COMPILE_ERROR, E_USER_ERROR];
-
- public function __construct(
- private LoggerInterface $logger
- ) {
- }
-
- /**
- * Registers a new ErrorHandler for a given Logger
- *
- * By default it will handle errors, exceptions and fatal errors
- *
- * @param array|false $errorLevelMap an array of E_* constant to LogLevel::* constant mapping, or false to disable error handling
- * @param array|false $exceptionLevelMap an array of class name to LogLevel::* constant mapping, or false to disable exception handling
- * @param LogLevel::*|null|false $fatalLevel a LogLevel::* constant, null to use the default LogLevel::ALERT or false to disable fatal error handling
- * @return static
- */
- public static function register(LoggerInterface $logger, $errorLevelMap = [], $exceptionLevelMap = [], $fatalLevel = null): self
- {
- /** @phpstan-ignore-next-line */
- $handler = new static($logger);
- if ($errorLevelMap !== false) {
- $handler->registerErrorHandler($errorLevelMap);
- }
- if ($exceptionLevelMap !== false) {
- $handler->registerExceptionHandler($exceptionLevelMap);
- }
- if ($fatalLevel !== false) {
- $handler->registerFatalHandler($fatalLevel);
- }
-
- return $handler;
- }
-
- /**
- * @param array $levelMap an array of class name to LogLevel::* constant mapping
- * @return $this
- */
- public function registerExceptionHandler(array $levelMap = [], bool $callPrevious = true): self
- {
- $prev = set_exception_handler(function (\Throwable $e): void {
- $this->handleException($e);
- });
- $this->uncaughtExceptionLevelMap = $levelMap;
- foreach ($this->defaultExceptionLevelMap() as $class => $level) {
- if (!isset($this->uncaughtExceptionLevelMap[$class])) {
- $this->uncaughtExceptionLevelMap[$class] = $level;
- }
- }
- if ($callPrevious && null !== $prev) {
- $this->previousExceptionHandler = $prev(...);
- }
-
- return $this;
- }
-
- /**
- * @param array $levelMap an array of E_* constant to LogLevel::* constant mapping
- * @return $this
- */
- public function registerErrorHandler(array $levelMap = [], bool $callPrevious = true, int $errorTypes = -1, bool $handleOnlyReportedErrors = true): self
- {
- $prev = set_error_handler($this->handleError(...), $errorTypes);
- $this->errorLevelMap = array_replace($this->defaultErrorLevelMap(), $levelMap);
- if ($callPrevious) {
- $this->previousErrorHandler = $prev !== null ? $prev(...) : true;
- } else {
- $this->previousErrorHandler = null;
- }
-
- $this->handleOnlyReportedErrors = $handleOnlyReportedErrors;
-
- return $this;
- }
-
- /**
- * @param LogLevel::*|null $level a LogLevel::* constant, null to use the default LogLevel::ALERT
- * @param int $reservedMemorySize Amount of KBs to reserve in memory so that it can be freed when handling fatal errors giving Monolog some room in memory to get its job done
- * @return $this
- */
- public function registerFatalHandler($level = null, int $reservedMemorySize = 20): self
- {
- register_shutdown_function($this->handleFatalError(...));
-
- $this->reservedMemory = str_repeat(' ', 1024 * $reservedMemorySize);
- $this->fatalLevel = null === $level ? LogLevel::ALERT : $level;
- $this->hasFatalErrorHandler = true;
-
- return $this;
- }
-
- /**
- * @return array
- */
- protected function defaultExceptionLevelMap(): array
- {
- return [
- 'ParseError' => LogLevel::CRITICAL,
- 'Throwable' => LogLevel::ERROR,
- ];
- }
-
- /**
- * @return array
- */
- protected function defaultErrorLevelMap(): array
- {
- return [
- E_ERROR => LogLevel::CRITICAL,
- E_WARNING => LogLevel::WARNING,
- E_PARSE => LogLevel::ALERT,
- E_NOTICE => LogLevel::NOTICE,
- E_CORE_ERROR => LogLevel::CRITICAL,
- E_CORE_WARNING => LogLevel::WARNING,
- E_COMPILE_ERROR => LogLevel::ALERT,
- E_COMPILE_WARNING => LogLevel::WARNING,
- E_USER_ERROR => LogLevel::ERROR,
- E_USER_WARNING => LogLevel::WARNING,
- E_USER_NOTICE => LogLevel::NOTICE,
- E_STRICT => LogLevel::NOTICE,
- E_RECOVERABLE_ERROR => LogLevel::ERROR,
- E_DEPRECATED => LogLevel::NOTICE,
- E_USER_DEPRECATED => LogLevel::NOTICE,
- ];
- }
-
- private function handleException(\Throwable $e): never
- {
- $level = LogLevel::ERROR;
- foreach ($this->uncaughtExceptionLevelMap as $class => $candidate) {
- if ($e instanceof $class) {
- $level = $candidate;
- break;
- }
- }
-
- $this->logger->log(
- $level,
- sprintf('Uncaught Exception %s: "%s" at %s line %s', Utils::getClass($e), $e->getMessage(), $e->getFile(), $e->getLine()),
- ['exception' => $e]
- );
-
- if (null !== $this->previousExceptionHandler) {
- ($this->previousExceptionHandler)($e);
- }
-
- if (!headers_sent() && in_array(strtolower((string) ini_get('display_errors')), ['0', '', 'false', 'off', 'none', 'no'], true)) {
- http_response_code(500);
- }
-
- exit(255);
- }
-
- private function handleError(int $code, string $message, string $file = '', int $line = 0): bool
- {
- if ($this->handleOnlyReportedErrors && 0 === (error_reporting() & $code)) {
- return false;
- }
-
- // fatal error codes are ignored if a fatal error handler is present as well to avoid duplicate log entries
- if (!$this->hasFatalErrorHandler || !in_array($code, self::FATAL_ERRORS, true)) {
- $level = $this->errorLevelMap[$code] ?? LogLevel::CRITICAL;
- $this->logger->log($level, self::codeToString($code).': '.$message, ['code' => $code, 'message' => $message, 'file' => $file, 'line' => $line]);
- } else {
- $trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);
- array_shift($trace); // Exclude handleError from trace
- $this->lastFatalData = ['type' => $code, 'message' => $message, 'file' => $file, 'line' => $line, 'trace' => $trace];
- }
-
- if ($this->previousErrorHandler === true) {
- return false;
- }
- if ($this->previousErrorHandler instanceof Closure) {
- return (bool) ($this->previousErrorHandler)($code, $message, $file, $line);
- }
-
- return true;
- }
-
- /**
- * @private
- */
- public function handleFatalError(): void
- {
- $this->reservedMemory = '';
-
- if (is_array($this->lastFatalData)) {
- $lastError = $this->lastFatalData;
- } else {
- $lastError = error_get_last();
- }
- if (is_array($lastError) && in_array($lastError['type'], self::FATAL_ERRORS, true)) {
- $trace = $lastError['trace'] ?? null;
- $this->logger->log(
- $this->fatalLevel,
- 'Fatal Error ('.self::codeToString($lastError['type']).'): '.$lastError['message'],
- ['code' => $lastError['type'], 'message' => $lastError['message'], 'file' => $lastError['file'], 'line' => $lastError['line'], 'trace' => $trace]
- );
-
- if ($this->logger instanceof Logger) {
- foreach ($this->logger->getHandlers() as $handler) {
- $handler->close();
- }
- }
- }
- }
-
- private static function codeToString(int $code): string
- {
- return match ($code) {
- E_ERROR => 'E_ERROR',
- E_WARNING => 'E_WARNING',
- E_PARSE => 'E_PARSE',
- E_NOTICE => 'E_NOTICE',
- E_CORE_ERROR => 'E_CORE_ERROR',
- E_CORE_WARNING => 'E_CORE_WARNING',
- E_COMPILE_ERROR => 'E_COMPILE_ERROR',
- E_COMPILE_WARNING => 'E_COMPILE_WARNING',
- E_USER_ERROR => 'E_USER_ERROR',
- E_USER_WARNING => 'E_USER_WARNING',
- E_USER_NOTICE => 'E_USER_NOTICE',
- E_STRICT => 'E_STRICT',
- E_RECOVERABLE_ERROR => 'E_RECOVERABLE_ERROR',
- E_DEPRECATED => 'E_DEPRECATED',
- E_USER_DEPRECATED => 'E_USER_DEPRECATED',
- default => 'Unknown PHP error',
- };
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/monolog/monolog/src/Monolog/Formatter/ChromePHPFormatter.php b/fixtures/symfony_5_local_deps/vendor/monolog/monolog/src/Monolog/Formatter/ChromePHPFormatter.php
deleted file mode 100644
index 3f1d45829..000000000
--- a/fixtures/symfony_5_local_deps/vendor/monolog/monolog/src/Monolog/Formatter/ChromePHPFormatter.php
+++ /dev/null
@@ -1,87 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Monolog\Formatter;
-
-use Monolog\Level;
-use Monolog\LogRecord;
-
-/**
- * Formats a log message according to the ChromePHP array format
- *
- * @author Christophe Coevoet
- */
-class ChromePHPFormatter implements FormatterInterface
-{
- /**
- * Translates Monolog log levels to Wildfire levels.
- *
- * @return 'log'|'info'|'warn'|'error'
- */
- private function toWildfireLevel(Level $level): string
- {
- return match ($level) {
- Level::Debug => 'log',
- Level::Info => 'info',
- Level::Notice => 'info',
- Level::Warning => 'warn',
- Level::Error => 'error',
- Level::Critical => 'error',
- Level::Alert => 'error',
- Level::Emergency => 'error',
- };
- }
-
- /**
- * @inheritDoc
- */
- public function format(LogRecord $record)
- {
- // Retrieve the line and file if set and remove them from the formatted extra
- $backtrace = 'unknown';
- if (isset($record->extra['file'], $record->extra['line'])) {
- $backtrace = $record->extra['file'].' : '.$record->extra['line'];
- unset($record->extra['file'], $record->extra['line']);
- }
-
- $message = ['message' => $record->message];
- if (\count($record->context) > 0) {
- $message['context'] = $record->context;
- }
- if (\count($record->extra) > 0) {
- $message['extra'] = $record->extra;
- }
- if (count($message) === 1) {
- $message = reset($message);
- }
-
- return [
- $record->channel,
- $message,
- $backtrace,
- $this->toWildfireLevel($record->level),
- ];
- }
-
- /**
- * @inheritDoc
- */
- public function formatBatch(array $records)
- {
- $formatted = [];
-
- foreach ($records as $record) {
- $formatted[] = $this->format($record);
- }
-
- return $formatted;
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/monolog/monolog/src/Monolog/Formatter/ElasticaFormatter.php b/fixtures/symfony_5_local_deps/vendor/monolog/monolog/src/Monolog/Formatter/ElasticaFormatter.php
deleted file mode 100644
index 8c92eff22..000000000
--- a/fixtures/symfony_5_local_deps/vendor/monolog/monolog/src/Monolog/Formatter/ElasticaFormatter.php
+++ /dev/null
@@ -1,89 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Monolog\Formatter;
-
-use Elastica\Document;
-use Monolog\LogRecord;
-
-/**
- * Format a log message into an Elastica Document
- *
- * @author Jelle Vink
- */
-class ElasticaFormatter extends NormalizerFormatter
-{
- /**
- * @var string Elastic search index name
- */
- protected string $index;
-
- /**
- * @var string|null Elastic search document type
- */
- protected string|null $type;
-
- /**
- * @param string $index Elastic Search index name
- * @param ?string $type Elastic Search document type, deprecated as of Elastica 7
- *
- * @throws \RuntimeException If the function json_encode does not exist
- */
- public function __construct(string $index, ?string $type)
- {
- // elasticsearch requires a ISO 8601 format date with optional millisecond precision.
- parent::__construct('Y-m-d\TH:i:s.uP');
-
- $this->index = $index;
- $this->type = $type;
- }
-
- /**
- * @inheritDoc
- */
- public function format(LogRecord $record)
- {
- $record = parent::format($record);
-
- return $this->getDocument($record);
- }
-
- public function getIndex(): string
- {
- return $this->index;
- }
-
- /**
- * @deprecated since Elastica 7 type has no effect
- */
- public function getType(): string
- {
- /** @phpstan-ignore-next-line */
- return $this->type;
- }
-
- /**
- * Convert a log message into an Elastica Document
- *
- * @param mixed[] $record
- */
- protected function getDocument(array $record): Document
- {
- $document = new Document();
- $document->setData($record);
- if (method_exists($document, 'setType')) {
- $document->setType($this->type);
- }
- $document->setIndex($this->index);
-
- return $document;
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/monolog/monolog/src/Monolog/Formatter/ElasticsearchFormatter.php b/fixtures/symfony_5_local_deps/vendor/monolog/monolog/src/Monolog/Formatter/ElasticsearchFormatter.php
deleted file mode 100644
index b38aca079..000000000
--- a/fixtures/symfony_5_local_deps/vendor/monolog/monolog/src/Monolog/Formatter/ElasticsearchFormatter.php
+++ /dev/null
@@ -1,88 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Monolog\Formatter;
-
-use DateTimeInterface;
-use Monolog\LogRecord;
-
-/**
- * Format a log message into an Elasticsearch record
- *
- * @author Avtandil Kikabidze
- */
-class ElasticsearchFormatter extends NormalizerFormatter
-{
- /**
- * @var string Elasticsearch index name
- */
- protected string $index;
-
- /**
- * @var string Elasticsearch record type
- */
- protected string $type;
-
- /**
- * @param string $index Elasticsearch index name
- * @param string $type Elasticsearch record type
- *
- * @throws \RuntimeException If the function json_encode does not exist
- */
- public function __construct(string $index, string $type)
- {
- // Elasticsearch requires an ISO 8601 format date with optional millisecond precision.
- parent::__construct(DateTimeInterface::ISO8601);
-
- $this->index = $index;
- $this->type = $type;
- }
-
- /**
- * @inheritDoc
- */
- public function format(LogRecord $record)
- {
- $record = parent::format($record);
-
- return $this->getDocument($record);
- }
-
- /**
- * Getter index
- */
- public function getIndex(): string
- {
- return $this->index;
- }
-
- /**
- * Getter type
- */
- public function getType(): string
- {
- return $this->type;
- }
-
- /**
- * Convert a log message into an Elasticsearch record
- *
- * @param mixed[] $record Log message
- * @return mixed[]
- */
- protected function getDocument(array $record): array
- {
- $record['_index'] = $this->index;
- $record['_type'] = $this->type;
-
- return $record;
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/monolog/monolog/src/Monolog/Formatter/FlowdockFormatter.php b/fixtures/symfony_5_local_deps/vendor/monolog/monolog/src/Monolog/Formatter/FlowdockFormatter.php
deleted file mode 100644
index c64da7c06..000000000
--- a/fixtures/symfony_5_local_deps/vendor/monolog/monolog/src/Monolog/Formatter/FlowdockFormatter.php
+++ /dev/null
@@ -1,106 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Monolog\Formatter;
-
-use Monolog\LogRecord;
-
-/**
- * formats the record to be used in the FlowdockHandler
- *
- * @author Dominik Liebler
- * @deprecated Since 2.9.0 and 3.3.0, Flowdock was shutdown we will thus drop this handler in Monolog 4
- */
-class FlowdockFormatter implements FormatterInterface
-{
- private string $source;
-
- private string $sourceEmail;
-
- public function __construct(string $source, string $sourceEmail)
- {
- $this->source = $source;
- $this->sourceEmail = $sourceEmail;
- }
-
- /**
- * @inheritDoc
- *
- * @return mixed[]
- */
- public function format(LogRecord $record): array
- {
- $tags = [
- '#logs',
- '#' . $record->level->toPsrLogLevel(),
- '#' . $record->channel,
- ];
-
- foreach ($record->extra as $value) {
- $tags[] = '#' . $value;
- }
-
- $subject = sprintf(
- 'in %s: %s - %s',
- $this->source,
- $record->level->getName(),
- $this->getShortMessage($record->message)
- );
-
- return [
- 'source' => $this->source,
- 'from_address' => $this->sourceEmail,
- 'subject' => $subject,
- 'content' => $record->message,
- 'tags' => $tags,
- 'project' => $this->source,
- ];
- }
-
- /**
- * @inheritDoc
- *
- * @return mixed[][]
- */
- public function formatBatch(array $records): array
- {
- $formatted = [];
-
- foreach ($records as $record) {
- $formatted[] = $this->format($record);
- }
-
- return $formatted;
- }
-
- public function getShortMessage(string $message): string
- {
- static $hasMbString;
-
- if (null === $hasMbString) {
- $hasMbString = function_exists('mb_strlen');
- }
-
- $maxLength = 45;
-
- if ($hasMbString) {
- if (mb_strlen($message, 'UTF-8') > $maxLength) {
- $message = mb_substr($message, 0, $maxLength - 4, 'UTF-8') . ' ...';
- }
- } else {
- if (strlen($message) > $maxLength) {
- $message = substr($message, 0, $maxLength - 4) . ' ...';
- }
- }
-
- return $message;
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/monolog/monolog/src/Monolog/Formatter/FluentdFormatter.php b/fixtures/symfony_5_local_deps/vendor/monolog/monolog/src/Monolog/Formatter/FluentdFormatter.php
deleted file mode 100644
index 04495a614..000000000
--- a/fixtures/symfony_5_local_deps/vendor/monolog/monolog/src/Monolog/Formatter/FluentdFormatter.php
+++ /dev/null
@@ -1,92 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Monolog\Formatter;
-
-use Monolog\Utils;
-use Monolog\LogRecord;
-
-/**
- * Class FluentdFormatter
- *
- * Serializes a log message to Fluentd unix socket protocol
- *
- * Fluentd config:
- *
- *
- * type unix
- * path /var/run/td-agent/td-agent.sock
- *
- *
- * Monolog setup:
- *
- * $logger = new Monolog\Logger('fluent.tag');
- * $fluentHandler = new Monolog\Handler\SocketHandler('unix:///var/run/td-agent/td-agent.sock');
- * $fluentHandler->setFormatter(new Monolog\Formatter\FluentdFormatter());
- * $logger->pushHandler($fluentHandler);
- *
- * @author Andrius Putna
- */
-class FluentdFormatter implements FormatterInterface
-{
- /**
- * @var bool $levelTag should message level be a part of the fluentd tag
- */
- protected bool $levelTag = false;
-
- /**
- * @throws \RuntimeException If the function json_encode does not exist
- */
- public function __construct(bool $levelTag = false)
- {
- if (!function_exists('json_encode')) {
- throw new \RuntimeException('PHP\'s json extension is required to use Monolog\'s FluentdUnixFormatter');
- }
-
- $this->levelTag = $levelTag;
- }
-
- public function isUsingLevelsInTag(): bool
- {
- return $this->levelTag;
- }
-
- public function format(LogRecord $record): string
- {
- $tag = $record->channel;
- if ($this->levelTag) {
- $tag .= '.' . $record->level->toPsrLogLevel();
- }
-
- $message = [
- 'message' => $record->message,
- 'context' => $record->context,
- 'extra' => $record->extra,
- ];
-
- if (!$this->levelTag) {
- $message['level'] = $record->level->value;
- $message['level_name'] = $record->level->getName();
- }
-
- return Utils::jsonEncode([$tag, $record->datetime->getTimestamp(), $message]);
- }
-
- public function formatBatch(array $records): string
- {
- $message = '';
- foreach ($records as $record) {
- $message .= $this->format($record);
- }
-
- return $message;
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/monolog/monolog/src/Monolog/Formatter/FormatterInterface.php b/fixtures/symfony_5_local_deps/vendor/monolog/monolog/src/Monolog/Formatter/FormatterInterface.php
deleted file mode 100644
index 3413a4b05..000000000
--- a/fixtures/symfony_5_local_deps/vendor/monolog/monolog/src/Monolog/Formatter/FormatterInterface.php
+++ /dev/null
@@ -1,38 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Monolog\Formatter;
-
-use Monolog\LogRecord;
-
-/**
- * Interface for formatters
- *
- * @author Jordi Boggiano
- */
-interface FormatterInterface
-{
- /**
- * Formats a log record.
- *
- * @param LogRecord $record A record to format
- * @return mixed The formatted record
- */
- public function format(LogRecord $record);
-
- /**
- * Formats a set of log records.
- *
- * @param array $records A set of records to format
- * @return mixed The formatted set of records
- */
- public function formatBatch(array $records);
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/monolog/monolog/src/Monolog/Formatter/GelfMessageFormatter.php b/fixtures/symfony_5_local_deps/vendor/monolog/monolog/src/Monolog/Formatter/GelfMessageFormatter.php
deleted file mode 100644
index 96cb60ffe..000000000
--- a/fixtures/symfony_5_local_deps/vendor/monolog/monolog/src/Monolog/Formatter/GelfMessageFormatter.php
+++ /dev/null
@@ -1,148 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Monolog\Formatter;
-
-use Monolog\Level;
-use Gelf\Message;
-use Monolog\Utils;
-use Monolog\LogRecord;
-
-/**
- * Serializes a log message to GELF
- * @see http://docs.graylog.org/en/latest/pages/gelf.html
- *
- * @author Matt Lehner
- */
-class GelfMessageFormatter extends NormalizerFormatter
-{
- protected const DEFAULT_MAX_LENGTH = 32766;
-
- /**
- * @var string the name of the system for the Gelf log message
- */
- protected string $systemName;
-
- /**
- * @var string a prefix for 'extra' fields from the Monolog record (optional)
- */
- protected string $extraPrefix;
-
- /**
- * @var string a prefix for 'context' fields from the Monolog record (optional)
- */
- protected string $contextPrefix;
-
- /**
- * @var int max length per field
- */
- protected int $maxLength;
-
- /**
- * Translates Monolog log levels to Graylog2 log priorities.
- */
- private function getGraylog2Priority(Level $level): int
- {
- return match ($level) {
- Level::Debug => 7,
- Level::Info => 6,
- Level::Notice => 5,
- Level::Warning => 4,
- Level::Error => 3,
- Level::Critical => 2,
- Level::Alert => 1,
- Level::Emergency => 0,
- };
- }
-
- /**
- * @throws \RuntimeException
- */
- public function __construct(?string $systemName = null, ?string $extraPrefix = null, string $contextPrefix = 'ctxt_', ?int $maxLength = null)
- {
- if (!class_exists(Message::class)) {
- throw new \RuntimeException('Composer package graylog2/gelf-php is required to use Monolog\'s GelfMessageFormatter');
- }
-
- parent::__construct('U.u');
-
- $this->systemName = (null === $systemName || $systemName === '') ? (string) gethostname() : $systemName;
-
- $this->extraPrefix = null === $extraPrefix ? '' : $extraPrefix;
- $this->contextPrefix = $contextPrefix;
- $this->maxLength = null === $maxLength ? self::DEFAULT_MAX_LENGTH : $maxLength;
- }
-
- /**
- * @inheritDoc
- */
- public function format(LogRecord $record): Message
- {
- $context = $extra = [];
- if (isset($record->context)) {
- /** @var mixed[] $context */
- $context = parent::normalize($record->context);
- }
- if (isset($record->extra)) {
- /** @var mixed[] $extra */
- $extra = parent::normalize($record->extra);
- }
-
- $message = new Message();
- $message
- ->setTimestamp($record->datetime)
- ->setShortMessage($record->message)
- ->setHost($this->systemName)
- ->setLevel($this->getGraylog2Priority($record->level));
-
- // message length + system name length + 200 for padding / metadata
- $len = 200 + strlen($record->message) + strlen($this->systemName);
-
- if ($len > $this->maxLength) {
- $message->setShortMessage(Utils::substr($record->message, 0, $this->maxLength));
- }
-
- if (isset($record->channel)) {
- $message->setAdditional('facility', $record->channel);
- }
-
- foreach ($extra as $key => $val) {
- $val = is_scalar($val) || null === $val ? $val : $this->toJson($val);
- $len = strlen($this->extraPrefix . $key . $val);
- if ($len > $this->maxLength) {
- $message->setAdditional($this->extraPrefix . $key, Utils::substr((string) $val, 0, $this->maxLength));
-
- continue;
- }
- $message->setAdditional($this->extraPrefix . $key, $val);
- }
-
- foreach ($context as $key => $val) {
- $val = is_scalar($val) || null === $val ? $val : $this->toJson($val);
- $len = strlen($this->contextPrefix . $key . $val);
- if ($len > $this->maxLength) {
- $message->setAdditional($this->contextPrefix . $key, Utils::substr((string) $val, 0, $this->maxLength));
-
- continue;
- }
- $message->setAdditional($this->contextPrefix . $key, $val);
- }
-
- if (!$message->hasAdditional('file') && isset($context['exception']['file'])) {
- if (1 === preg_match("/^(.+):([0-9]+)$/", $context['exception']['file'], $matches)) {
- $message->setAdditional('file', $matches[1]);
- $message->setAdditional('line', $matches[2]);
- }
- }
-
- return $message;
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/monolog/monolog/src/Monolog/Formatter/HtmlFormatter.php b/fixtures/symfony_5_local_deps/vendor/monolog/monolog/src/Monolog/Formatter/HtmlFormatter.php
deleted file mode 100644
index c316b65ee..000000000
--- a/fixtures/symfony_5_local_deps/vendor/monolog/monolog/src/Monolog/Formatter/HtmlFormatter.php
+++ /dev/null
@@ -1,143 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Monolog\Formatter;
-
-use Monolog\Level;
-use Monolog\Utils;
-use Monolog\LogRecord;
-
-/**
- * Formats incoming records into an HTML table
- *
- * This is especially useful for html email logging
- *
- * @author Tiago Brito
- */
-class HtmlFormatter extends NormalizerFormatter
-{
- /**
- * Translates Monolog log levels to html color priorities.
- */
- protected function getLevelColor(Level $level): string
- {
- return match ($level) {
- Level::Debug => '#CCCCCC',
- Level::Info => '#28A745',
- Level::Notice => '#17A2B8',
- Level::Warning => '#FFC107',
- Level::Error => '#FD7E14',
- Level::Critical => '#DC3545',
- Level::Alert => '#821722',
- Level::Emergency => '#000000',
- };
- }
-
- /**
- * @param string|null $dateFormat The format of the timestamp: one supported by DateTime::format
- * @throws \RuntimeException If the function json_encode does not exist
- */
- public function __construct(?string $dateFormat = null)
- {
- parent::__construct($dateFormat);
- }
-
- /**
- * Creates an HTML table row
- *
- * @param string $th Row header content
- * @param string $td Row standard cell content
- * @param bool $escapeTd false if td content must not be html escaped
- */
- protected function addRow(string $th, string $td = ' ', bool $escapeTd = true): string
- {
- $th = htmlspecialchars($th, ENT_NOQUOTES, 'UTF-8');
- if ($escapeTd) {
- $td = ''.htmlspecialchars($td, ENT_NOQUOTES, 'UTF-8').' ';
- }
-
- return "\n$th: \n".$td." \n ";
- }
-
- /**
- * Create a HTML h1 tag
- *
- * @param string $title Text to be in the h1
- */
- protected function addTitle(string $title, Level $level): string
- {
- $title = htmlspecialchars($title, ENT_NOQUOTES, 'UTF-8');
-
- return ''.$title.' ';
- }
-
- /**
- * Formats a log record.
- *
- * @return string The formatted record
- */
- public function format(LogRecord $record): string
- {
- $output = $this->addTitle($record->level->getName(), $record->level);
- $output .= '';
-
- $output .= $this->addRow('Message', $record->message);
- $output .= $this->addRow('Time', $this->formatDate($record->datetime));
- $output .= $this->addRow('Channel', $record->channel);
- if (\count($record->context) > 0) {
- $embeddedTable = '';
- foreach ($record->context as $key => $value) {
- $embeddedTable .= $this->addRow((string) $key, $this->convertToString($value));
- }
- $embeddedTable .= '
';
- $output .= $this->addRow('Context', $embeddedTable, false);
- }
- if (\count($record->extra) > 0) {
- $embeddedTable = '';
- foreach ($record->extra as $key => $value) {
- $embeddedTable .= $this->addRow((string) $key, $this->convertToString($value));
- }
- $embeddedTable .= '
';
- $output .= $this->addRow('Extra', $embeddedTable, false);
- }
-
- return $output.'
';
- }
-
- /**
- * Formats a set of log records.
- *
- * @return string The formatted set of records
- */
- public function formatBatch(array $records): string
- {
- $message = '';
- foreach ($records as $record) {
- $message .= $this->format($record);
- }
-
- return $message;
- }
-
- /**
- * @param mixed $data
- */
- protected function convertToString($data): string
- {
- if (null === $data || is_scalar($data)) {
- return (string) $data;
- }
-
- $data = $this->normalize($data);
-
- return Utils::jsonEncode($data, JSON_PRETTY_PRINT | Utils::DEFAULT_JSON_FLAGS, true);
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/monolog/monolog/src/Monolog/Formatter/JsonFormatter.php b/fixtures/symfony_5_local_deps/vendor/monolog/monolog/src/Monolog/Formatter/JsonFormatter.php
deleted file mode 100644
index ca3d7d27f..000000000
--- a/fixtures/symfony_5_local_deps/vendor/monolog/monolog/src/Monolog/Formatter/JsonFormatter.php
+++ /dev/null
@@ -1,216 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Monolog\Formatter;
-
-use Stringable;
-use Throwable;
-use Monolog\LogRecord;
-
-/**
- * Encodes whatever record data is passed to it as json
- *
- * This can be useful to log to databases or remote APIs
- *
- * @author Jordi Boggiano
- */
-class JsonFormatter extends NormalizerFormatter
-{
- public const BATCH_MODE_JSON = 1;
- public const BATCH_MODE_NEWLINES = 2;
-
- /** @var self::BATCH_MODE_* */
- protected int $batchMode;
-
- protected bool $appendNewline;
-
- protected bool $ignoreEmptyContextAndExtra;
-
- protected bool $includeStacktraces = false;
-
- /**
- * @param self::BATCH_MODE_* $batchMode
- *
- * @throws \RuntimeException If the function json_encode does not exist
- */
- public function __construct(int $batchMode = self::BATCH_MODE_JSON, bool $appendNewline = true, bool $ignoreEmptyContextAndExtra = false, bool $includeStacktraces = false)
- {
- $this->batchMode = $batchMode;
- $this->appendNewline = $appendNewline;
- $this->ignoreEmptyContextAndExtra = $ignoreEmptyContextAndExtra;
- $this->includeStacktraces = $includeStacktraces;
-
- parent::__construct();
- }
-
- /**
- * The batch mode option configures the formatting style for
- * multiple records. By default, multiple records will be
- * formatted as a JSON-encoded array. However, for
- * compatibility with some API endpoints, alternative styles
- * are available.
- */
- public function getBatchMode(): int
- {
- return $this->batchMode;
- }
-
- /**
- * True if newlines are appended to every formatted record
- */
- public function isAppendingNewlines(): bool
- {
- return $this->appendNewline;
- }
-
- /**
- * @inheritDoc
- */
- public function format(LogRecord $record): string
- {
- $normalized = parent::format($record);
-
- if (isset($normalized['context']) && $normalized['context'] === []) {
- if ($this->ignoreEmptyContextAndExtra) {
- unset($normalized['context']);
- } else {
- $normalized['context'] = new \stdClass;
- }
- }
- if (isset($normalized['extra']) && $normalized['extra'] === []) {
- if ($this->ignoreEmptyContextAndExtra) {
- unset($normalized['extra']);
- } else {
- $normalized['extra'] = new \stdClass;
- }
- }
-
- return $this->toJson($normalized, true) . ($this->appendNewline ? "\n" : '');
- }
-
- /**
- * @inheritDoc
- */
- public function formatBatch(array $records): string
- {
- return match ($this->batchMode) {
- static::BATCH_MODE_NEWLINES => $this->formatBatchNewlines($records),
- default => $this->formatBatchJson($records),
- };
- }
-
- /**
- * @return $this
- */
- public function includeStacktraces(bool $include = true): self
- {
- $this->includeStacktraces = $include;
-
- return $this;
- }
-
- /**
- * Return a JSON-encoded array of records.
- *
- * @phpstan-param LogRecord[] $records
- */
- protected function formatBatchJson(array $records): string
- {
- return $this->toJson($this->normalize($records), true);
- }
-
- /**
- * Use new lines to separate records instead of a
- * JSON-encoded array.
- *
- * @phpstan-param LogRecord[] $records
- */
- protected function formatBatchNewlines(array $records): string
- {
- $oldNewline = $this->appendNewline;
- $this->appendNewline = false;
- $formatted = array_map(fn (LogRecord $record) => $this->format($record), $records);
- $this->appendNewline = $oldNewline;
-
- return implode("\n", $formatted);
- }
-
- /**
- * Normalizes given $data.
- *
- * @return null|scalar|array|object
- */
- protected function normalize(mixed $data, int $depth = 0): mixed
- {
- if ($depth > $this->maxNormalizeDepth) {
- return 'Over '.$this->maxNormalizeDepth.' levels deep, aborting normalization';
- }
-
- if (is_array($data)) {
- $normalized = [];
-
- $count = 1;
- foreach ($data as $key => $value) {
- if ($count++ > $this->maxNormalizeItemCount) {
- $normalized['...'] = 'Over '.$this->maxNormalizeItemCount.' items ('.count($data).' total), aborting normalization';
- break;
- }
-
- $normalized[$key] = $this->normalize($value, $depth + 1);
- }
-
- return $normalized;
- }
-
- if (is_object($data)) {
- if ($data instanceof \DateTimeInterface) {
- return $this->formatDate($data);
- }
-
- if ($data instanceof Throwable) {
- return $this->normalizeException($data, $depth);
- }
-
- // if the object has specific json serializability we want to make sure we skip the __toString treatment below
- if ($data instanceof \JsonSerializable) {
- return $data;
- }
-
- if ($data instanceof Stringable) {
- return $data->__toString();
- }
-
- return $data;
- }
-
- if (is_resource($data)) {
- return parent::normalize($data);
- }
-
- return $data;
- }
-
- /**
- * Normalizes given exception with or without its own stack trace based on
- * `includeStacktraces` property.
- *
- * @inheritDoc
- */
- protected function normalizeException(Throwable $e, int $depth = 0): array
- {
- $data = parent::normalizeException($e, $depth);
- if (!$this->includeStacktraces) {
- unset($data['trace']);
- }
-
- return $data;
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/monolog/monolog/src/Monolog/Formatter/LineFormatter.php b/fixtures/symfony_5_local_deps/vendor/monolog/monolog/src/Monolog/Formatter/LineFormatter.php
deleted file mode 100644
index 025572a5c..000000000
--- a/fixtures/symfony_5_local_deps/vendor/monolog/monolog/src/Monolog/Formatter/LineFormatter.php
+++ /dev/null
@@ -1,289 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Monolog\Formatter;
-
-use Closure;
-use Monolog\Utils;
-use Monolog\LogRecord;
-
-/**
- * Formats incoming records into a one-line string
- *
- * This is especially useful for logging to files
- *
- * @author Jordi Boggiano
- * @author Christophe Coevoet
- */
-class LineFormatter extends NormalizerFormatter
-{
- public const SIMPLE_FORMAT = "[%datetime%] %channel%.%level_name%: %message% %context% %extra%\n";
-
- protected string $format;
- protected bool $allowInlineLineBreaks;
- protected bool $ignoreEmptyContextAndExtra;
- protected bool $includeStacktraces;
- protected ?int $maxLevelNameLength = null;
- protected string $indentStacktraces = '';
- protected Closure|null $stacktracesParser = null;
-
- /**
- * @param string|null $format The format of the message
- * @param string|null $dateFormat The format of the timestamp: one supported by DateTime::format
- * @param bool $allowInlineLineBreaks Whether to allow inline line breaks in log entries
- *
- * @throws \RuntimeException If the function json_encode does not exist
- */
- public function __construct(?string $format = null, ?string $dateFormat = null, bool $allowInlineLineBreaks = false, bool $ignoreEmptyContextAndExtra = false, bool $includeStacktraces = false)
- {
- $this->format = $format === null ? static::SIMPLE_FORMAT : $format;
- $this->allowInlineLineBreaks = $allowInlineLineBreaks;
- $this->ignoreEmptyContextAndExtra = $ignoreEmptyContextAndExtra;
- $this->includeStacktraces($includeStacktraces);
- parent::__construct($dateFormat);
- }
-
- /**
- * @return $this
- */
- public function includeStacktraces(bool $include = true, ?Closure $parser = null): self
- {
- $this->includeStacktraces = $include;
- if ($this->includeStacktraces) {
- $this->allowInlineLineBreaks = true;
- $this->stacktracesParser = $parser;
- }
-
- return $this;
- }
-
- /**
- * Indent stack traces to separate them a bit from the main log record messages
- *
- * @param string $indent The string used to indent, for example " "
- * @return $this
- */
- public function indentStacktraces(string $indent): self
- {
- $this->indentStacktraces = $indent;
-
- return $this;
- }
-
- /**
- * @return $this
- */
- public function allowInlineLineBreaks(bool $allow = true): self
- {
- $this->allowInlineLineBreaks = $allow;
-
- return $this;
- }
-
- /**
- * @return $this
- */
- public function ignoreEmptyContextAndExtra(bool $ignore = true): self
- {
- $this->ignoreEmptyContextAndExtra = $ignore;
-
- return $this;
- }
-
- /**
- * Allows cutting the level name to get fixed-length levels like INF for INFO, ERR for ERROR if you set this to 3 for example
- *
- * @param int|null $maxLevelNameLength Maximum characters for the level name. Set null for infinite length (default)
- * @return $this
- */
- public function setMaxLevelNameLength(?int $maxLevelNameLength = null): self
- {
- $this->maxLevelNameLength = $maxLevelNameLength;
-
- return $this;
- }
-
- /**
- * @inheritDoc
- */
- public function format(LogRecord $record): string
- {
- $vars = parent::format($record);
-
- if ($this->maxLevelNameLength !== null) {
- $vars['level_name'] = substr($vars['level_name'], 0, $this->maxLevelNameLength);
- }
-
- $output = $this->format;
- foreach ($vars['extra'] as $var => $val) {
- if (false !== strpos($output, '%extra.'.$var.'%')) {
- $output = str_replace('%extra.'.$var.'%', $this->stringify($val), $output);
- unset($vars['extra'][$var]);
- }
- }
-
- foreach ($vars['context'] as $var => $val) {
- if (false !== strpos($output, '%context.'.$var.'%')) {
- $output = str_replace('%context.'.$var.'%', $this->stringify($val), $output);
- unset($vars['context'][$var]);
- }
- }
-
- if ($this->ignoreEmptyContextAndExtra) {
- if (\count($vars['context']) === 0) {
- unset($vars['context']);
- $output = str_replace('%context%', '', $output);
- }
-
- if (\count($vars['extra']) === 0) {
- unset($vars['extra']);
- $output = str_replace('%extra%', '', $output);
- }
- }
-
- foreach ($vars as $var => $val) {
- if (false !== strpos($output, '%'.$var.'%')) {
- $output = str_replace('%'.$var.'%', $this->stringify($val), $output);
- }
- }
-
- // remove leftover %extra.xxx% and %context.xxx% if any
- if (false !== strpos($output, '%')) {
- $output = preg_replace('/%(?:extra|context)\..+?%/', '', $output);
- if (null === $output) {
- $pcreErrorCode = preg_last_error();
-
- throw new \RuntimeException('Failed to run preg_replace: ' . $pcreErrorCode . ' / ' . Utils::pcreLastErrorMessage($pcreErrorCode));
- }
- }
-
- return $output;
- }
-
- public function formatBatch(array $records): string
- {
- $message = '';
- foreach ($records as $record) {
- $message .= $this->format($record);
- }
-
- return $message;
- }
-
- /**
- * @param mixed $value
- */
- public function stringify($value): string
- {
- return $this->replaceNewlines($this->convertToString($value));
- }
-
- protected function normalizeException(\Throwable $e, int $depth = 0): string
- {
- $str = $this->formatException($e);
-
- if (($previous = $e->getPrevious()) instanceof \Throwable) {
- do {
- $depth++;
- if ($depth > $this->maxNormalizeDepth) {
- $str .= "\n[previous exception] Over " . $this->maxNormalizeDepth . ' levels deep, aborting normalization';
- break;
- }
-
- $str .= "\n[previous exception] " . $this->formatException($previous);
- } while ($previous = $previous->getPrevious());
- }
-
- return $str;
- }
-
- /**
- * @param mixed $data
- */
- protected function convertToString($data): string
- {
- if (null === $data || is_bool($data)) {
- return var_export($data, true);
- }
-
- if (is_scalar($data)) {
- return (string) $data;
- }
-
- return $this->toJson($data, true);
- }
-
- protected function replaceNewlines(string $str): string
- {
- if ($this->allowInlineLineBreaks) {
- if (0 === strpos($str, '{') || 0 === strpos($str, '[')) {
- $str = preg_replace('/(?getCode();
- if ($e instanceof \SoapFault) {
- if (isset($e->faultcode)) {
- $str .= ' faultcode: ' . $e->faultcode;
- }
-
- if (isset($e->faultactor)) {
- $str .= ' faultactor: ' . $e->faultactor;
- }
-
- if (isset($e->detail)) {
- if (is_string($e->detail)) {
- $str .= ' detail: ' . $e->detail;
- } elseif (is_object($e->detail) || is_array($e->detail)) {
- $str .= ' detail: ' . $this->toJson($e->detail, true);
- }
- }
- }
- $str .= '): ' . $e->getMessage() . ' at ' . $e->getFile() . ':' . $e->getLine() . ')';
-
- if ($this->includeStacktraces) {
- $str .= $this->stacktracesParser($e);
- }
-
- return $str;
- }
-
- private function stacktracesParser(\Throwable $e): string
- {
- $trace = $e->getTraceAsString();
-
- if ($this->stacktracesParser !== null) {
- $trace = $this->stacktracesParserCustom($trace);
- }
-
- if ($this->indentStacktraces !== '') {
- $trace = str_replace("\n", "\n{$this->indentStacktraces}", $trace);
- }
-
- return "\n{$this->indentStacktraces}[stacktrace]\n{$this->indentStacktraces}" . $trace . "\n";
- }
-
- private function stacktracesParserCustom(string $trace): string
- {
- return implode("\n", array_filter(array_map($this->stacktracesParser, explode("\n", $trace))));
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/monolog/monolog/src/Monolog/Formatter/LogglyFormatter.php b/fixtures/symfony_5_local_deps/vendor/monolog/monolog/src/Monolog/Formatter/LogglyFormatter.php
deleted file mode 100644
index 5f0b6a453..000000000
--- a/fixtures/symfony_5_local_deps/vendor/monolog/monolog/src/Monolog/Formatter/LogglyFormatter.php
+++ /dev/null
@@ -1,47 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Monolog\Formatter;
-
-use Monolog\LogRecord;
-
-/**
- * Encodes message information into JSON in a format compatible with Loggly.
- *
- * @author Adam Pancutt
- */
-class LogglyFormatter extends JsonFormatter
-{
- /**
- * Overrides the default batch mode to new lines for compatibility with the
- * Loggly bulk API.
- */
- public function __construct(int $batchMode = self::BATCH_MODE_NEWLINES, bool $appendNewline = false)
- {
- parent::__construct($batchMode, $appendNewline);
- }
-
- /**
- * Appends the 'timestamp' parameter for indexing by Loggly.
- *
- * @see https://www.loggly.com/docs/automated-parsing/#json
- * @see \Monolog\Formatter\JsonFormatter::format()
- */
- protected function normalizeRecord(LogRecord $record): array
- {
- $recordData = parent::normalizeRecord($record);
-
- $recordData["timestamp"] = $record->datetime->format("Y-m-d\TH:i:s.uO");
- unset($recordData["datetime"]);
-
- return $recordData;
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/monolog/monolog/src/Monolog/Formatter/LogmaticFormatter.php b/fixtures/symfony_5_local_deps/vendor/monolog/monolog/src/Monolog/Formatter/LogmaticFormatter.php
deleted file mode 100644
index 9e44c19f4..000000000
--- a/fixtures/symfony_5_local_deps/vendor/monolog/monolog/src/Monolog/Formatter/LogmaticFormatter.php
+++ /dev/null
@@ -1,70 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Monolog\Formatter;
-
-use Monolog\LogRecord;
-
-/**
- * Encodes message information into JSON in a format compatible with Logmatic.
- *
- * @author Julien Breux
- */
-class LogmaticFormatter extends JsonFormatter
-{
- protected const MARKERS = ["sourcecode", "php"];
-
- protected string $hostname = '';
-
- protected string $appName = '';
-
- /**
- * @return $this
- */
- public function setHostname(string $hostname): self
- {
- $this->hostname = $hostname;
-
- return $this;
- }
-
- /**
- * @return $this
- */
- public function setAppName(string $appName): self
- {
- $this->appName = $appName;
-
- return $this;
- }
-
- /**
- * Appends the 'hostname' and 'appname' parameter for indexing by Logmatic.
- *
- * @see http://doc.logmatic.io/docs/basics-to-send-data
- * @see \Monolog\Formatter\JsonFormatter::format()
- */
- public function normalizeRecord(LogRecord $record): array
- {
- $record = parent::normalizeRecord($record);
-
- if ($this->hostname !== '') {
- $record["hostname"] = $this->hostname;
- }
- if ($this->appName !== '') {
- $record["appname"] = $this->appName;
- }
-
- $record["@marker"] = static::MARKERS;
-
- return $record;
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/monolog/monolog/src/Monolog/Formatter/LogstashFormatter.php b/fixtures/symfony_5_local_deps/vendor/monolog/monolog/src/Monolog/Formatter/LogstashFormatter.php
deleted file mode 100644
index abee3cd13..000000000
--- a/fixtures/symfony_5_local_deps/vendor/monolog/monolog/src/Monolog/Formatter/LogstashFormatter.php
+++ /dev/null
@@ -1,102 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Monolog\Formatter;
-
-use Monolog\LogRecord;
-
-/**
- * Serializes a log message to Logstash Event Format
- *
- * @see https://www.elastic.co/products/logstash
- * @see https://github.com/elastic/logstash/blob/master/logstash-core/src/main/java/org/logstash/Event.java
- *
- * @author Tim Mower
- */
-class LogstashFormatter extends NormalizerFormatter
-{
- /**
- * @var string the name of the system for the Logstash log message, used to fill the @source field
- */
- protected string $systemName;
-
- /**
- * @var string an application name for the Logstash log message, used to fill the @type field
- */
- protected string $applicationName;
-
- /**
- * @var string the key for 'extra' fields from the Monolog record
- */
- protected string $extraKey;
-
- /**
- * @var string the key for 'context' fields from the Monolog record
- */
- protected string $contextKey;
-
- /**
- * @param string $applicationName The application that sends the data, used as the "type" field of logstash
- * @param string|null $systemName The system/machine name, used as the "source" field of logstash, defaults to the hostname of the machine
- * @param string $extraKey The key for extra keys inside logstash "fields", defaults to extra
- * @param string $contextKey The key for context keys inside logstash "fields", defaults to context
- *
- * @throws \RuntimeException If the function json_encode does not exist
- */
- public function __construct(string $applicationName, ?string $systemName = null, string $extraKey = 'extra', string $contextKey = 'context')
- {
- // logstash requires a ISO 8601 format date with optional millisecond precision.
- parent::__construct('Y-m-d\TH:i:s.uP');
-
- $this->systemName = $systemName === null ? (string) gethostname() : $systemName;
- $this->applicationName = $applicationName;
- $this->extraKey = $extraKey;
- $this->contextKey = $contextKey;
- }
-
- /**
- * @inheritDoc
- */
- public function format(LogRecord $record): string
- {
- $recordData = parent::format($record);
-
- $message = [
- '@timestamp' => $recordData['datetime'],
- '@version' => 1,
- 'host' => $this->systemName,
- ];
- if (isset($recordData['message'])) {
- $message['message'] = $recordData['message'];
- }
- if (isset($recordData['channel'])) {
- $message['type'] = $recordData['channel'];
- $message['channel'] = $recordData['channel'];
- }
- if (isset($recordData['level_name'])) {
- $message['level'] = $recordData['level_name'];
- }
- if (isset($recordData['level'])) {
- $message['monolog_level'] = $recordData['level'];
- }
- if ('' !== $this->applicationName) {
- $message['type'] = $this->applicationName;
- }
- if (\count($recordData['extra']) > 0) {
- $message[$this->extraKey] = $recordData['extra'];
- }
- if (\count($recordData['context']) > 0) {
- $message[$this->contextKey] = $recordData['context'];
- }
-
- return $this->toJson($message) . "\n";
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/monolog/monolog/src/Monolog/Formatter/MongoDBFormatter.php b/fixtures/symfony_5_local_deps/vendor/monolog/monolog/src/Monolog/Formatter/MongoDBFormatter.php
deleted file mode 100644
index 9b7da8a9c..000000000
--- a/fixtures/symfony_5_local_deps/vendor/monolog/monolog/src/Monolog/Formatter/MongoDBFormatter.php
+++ /dev/null
@@ -1,159 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Monolog\Formatter;
-
-use MongoDB\BSON\Type;
-use MongoDB\BSON\UTCDateTime;
-use Monolog\Utils;
-use Monolog\LogRecord;
-
-/**
- * Formats a record for use with the MongoDBHandler.
- *
- * @author Florian Plattner
- */
-class MongoDBFormatter implements FormatterInterface
-{
- private bool $exceptionTraceAsString;
- private int $maxNestingLevel;
- private bool $isLegacyMongoExt;
-
- /**
- * @param int $maxNestingLevel 0 means infinite nesting, the $record itself is level 1, $record->context is 2
- * @param bool $exceptionTraceAsString set to false to log exception traces as a sub documents instead of strings
- */
- public function __construct(int $maxNestingLevel = 3, bool $exceptionTraceAsString = true)
- {
- $this->maxNestingLevel = max($maxNestingLevel, 0);
- $this->exceptionTraceAsString = $exceptionTraceAsString;
-
- $this->isLegacyMongoExt = extension_loaded('mongodb') && version_compare((string) phpversion('mongodb'), '1.1.9', '<=');
- }
-
- /**
- * @inheritDoc
- *
- * @return mixed[]
- */
- public function format(LogRecord $record): array
- {
- /** @var mixed[] $res */
- $res = $this->formatArray($record->toArray());
-
- return $res;
- }
-
- /**
- * @inheritDoc
- *
- * @return array
- */
- public function formatBatch(array $records): array
- {
- $formatted = [];
- foreach ($records as $key => $record) {
- $formatted[$key] = $this->format($record);
- }
-
- return $formatted;
- }
-
- /**
- * @param mixed[] $array
- * @return mixed[]|string Array except when max nesting level is reached then a string "[...]"
- */
- protected function formatArray(array $array, int $nestingLevel = 0)
- {
- if ($this->maxNestingLevel > 0 && $nestingLevel > $this->maxNestingLevel) {
- return '[...]';
- }
-
- foreach ($array as $name => $value) {
- if ($value instanceof \DateTimeInterface) {
- $array[$name] = $this->formatDate($value, $nestingLevel + 1);
- } elseif ($value instanceof \Throwable) {
- $array[$name] = $this->formatException($value, $nestingLevel + 1);
- } elseif (is_array($value)) {
- $array[$name] = $this->formatArray($value, $nestingLevel + 1);
- } elseif (is_object($value) && !$value instanceof Type) {
- $array[$name] = $this->formatObject($value, $nestingLevel + 1);
- }
- }
-
- return $array;
- }
-
- /**
- * @param mixed $value
- * @return mixed[]|string
- */
- protected function formatObject($value, int $nestingLevel)
- {
- $objectVars = get_object_vars($value);
- $objectVars['class'] = Utils::getClass($value);
-
- return $this->formatArray($objectVars, $nestingLevel);
- }
-
- /**
- * @return mixed[]|string
- */
- protected function formatException(\Throwable $exception, int $nestingLevel)
- {
- $formattedException = [
- 'class' => Utils::getClass($exception),
- 'message' => $exception->getMessage(),
- 'code' => (int) $exception->getCode(),
- 'file' => $exception->getFile() . ':' . $exception->getLine(),
- ];
-
- if ($this->exceptionTraceAsString === true) {
- $formattedException['trace'] = $exception->getTraceAsString();
- } else {
- $formattedException['trace'] = $exception->getTrace();
- }
-
- return $this->formatArray($formattedException, $nestingLevel);
- }
-
- protected function formatDate(\DateTimeInterface $value, int $nestingLevel): UTCDateTime
- {
- if ($this->isLegacyMongoExt) {
- return $this->legacyGetMongoDbDateTime($value);
- }
-
- return $this->getMongoDbDateTime($value);
- }
-
- private function getMongoDbDateTime(\DateTimeInterface $value): UTCDateTime
- {
- return new UTCDateTime((int) floor(((float) $value->format('U.u')) * 1000));
- }
-
- /**
- * This is needed to support MongoDB Driver v1.19 and below
- *
- * See https://github.com/mongodb/mongo-php-driver/issues/426
- *
- * It can probably be removed in 2.1 or later once MongoDB's 1.2 is released and widely adopted
- */
- private function legacyGetMongoDbDateTime(\DateTimeInterface $value): UTCDateTime
- {
- $milliseconds = floor(((float) $value->format('U.u')) * 1000);
-
- $milliseconds = (PHP_INT_SIZE == 8) //64-bit OS?
- ? (int) $milliseconds
- : (string) $milliseconds;
-
- return new UTCDateTime($milliseconds);
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/monolog/monolog/src/Monolog/Formatter/NormalizerFormatter.php b/fixtures/symfony_5_local_deps/vendor/monolog/monolog/src/Monolog/Formatter/NormalizerFormatter.php
deleted file mode 100644
index a5c99156f..000000000
--- a/fixtures/symfony_5_local_deps/vendor/monolog/monolog/src/Monolog/Formatter/NormalizerFormatter.php
+++ /dev/null
@@ -1,325 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Monolog\Formatter;
-
-use Monolog\DateTimeImmutable;
-use Monolog\Utils;
-use Throwable;
-use Monolog\LogRecord;
-
-/**
- * Normalizes incoming records to remove objects/resources so it's easier to dump to various targets
- *
- * @author Jordi Boggiano
- */
-class NormalizerFormatter implements FormatterInterface
-{
- public const SIMPLE_DATE = "Y-m-d\TH:i:sP";
-
- protected string $dateFormat;
- protected int $maxNormalizeDepth = 9;
- protected int $maxNormalizeItemCount = 1000;
-
- private int $jsonEncodeOptions = Utils::DEFAULT_JSON_FLAGS;
-
- /**
- * @param string|null $dateFormat The format of the timestamp: one supported by DateTime::format
- * @throws \RuntimeException If the function json_encode does not exist
- */
- public function __construct(?string $dateFormat = null)
- {
- $this->dateFormat = null === $dateFormat ? static::SIMPLE_DATE : $dateFormat;
- if (!function_exists('json_encode')) {
- throw new \RuntimeException('PHP\'s json extension is required to use Monolog\'s NormalizerFormatter');
- }
- }
-
- /**
- * @inheritDoc
- */
- public function format(LogRecord $record)
- {
- return $this->normalizeRecord($record);
- }
-
- /**
- * Normalize an arbitrary value to a scalar|array|null
- *
- * @return null|scalar|array
- */
- public function normalizeValue(mixed $data): mixed
- {
- return $this->normalize($data);
- }
-
- /**
- * @inheritDoc
- */
- public function formatBatch(array $records)
- {
- foreach ($records as $key => $record) {
- $records[$key] = $this->format($record);
- }
-
- return $records;
- }
-
- public function getDateFormat(): string
- {
- return $this->dateFormat;
- }
-
- /**
- * @return $this
- */
- public function setDateFormat(string $dateFormat): self
- {
- $this->dateFormat = $dateFormat;
-
- return $this;
- }
-
- /**
- * The maximum number of normalization levels to go through
- */
- public function getMaxNormalizeDepth(): int
- {
- return $this->maxNormalizeDepth;
- }
-
- /**
- * @return $this
- */
- public function setMaxNormalizeDepth(int $maxNormalizeDepth): self
- {
- $this->maxNormalizeDepth = $maxNormalizeDepth;
-
- return $this;
- }
-
- /**
- * The maximum number of items to normalize per level
- */
- public function getMaxNormalizeItemCount(): int
- {
- return $this->maxNormalizeItemCount;
- }
-
- /**
- * @return $this
- */
- public function setMaxNormalizeItemCount(int $maxNormalizeItemCount): self
- {
- $this->maxNormalizeItemCount = $maxNormalizeItemCount;
-
- return $this;
- }
-
- /**
- * Enables `json_encode` pretty print.
- *
- * @return $this
- */
- public function setJsonPrettyPrint(bool $enable): self
- {
- if ($enable) {
- $this->jsonEncodeOptions |= JSON_PRETTY_PRINT;
- } else {
- $this->jsonEncodeOptions &= ~JSON_PRETTY_PRINT;
- }
-
- return $this;
- }
-
- /**
- * Provided as extension point
- *
- * Because normalize is called with sub-values of context data etc, normalizeRecord can be
- * extended when data needs to be appended on the record array but not to other normalized data.
- *
- * @return array
- */
- protected function normalizeRecord(LogRecord $record): array
- {
- /** @var array $normalized */
- $normalized = $this->normalize($record->toArray());
-
- return $normalized;
- }
-
- /**
- * @return null|scalar|array
- */
- protected function normalize(mixed $data, int $depth = 0): mixed
- {
- if ($depth > $this->maxNormalizeDepth) {
- return 'Over ' . $this->maxNormalizeDepth . ' levels deep, aborting normalization';
- }
-
- if (null === $data || is_scalar($data)) {
- if (is_float($data)) {
- if (is_infinite($data)) {
- return ($data > 0 ? '' : '-') . 'INF';
- }
- if (is_nan($data)) {
- return 'NaN';
- }
- }
-
- return $data;
- }
-
- if (is_array($data)) {
- $normalized = [];
-
- $count = 1;
- foreach ($data as $key => $value) {
- if ($count++ > $this->maxNormalizeItemCount) {
- $normalized['...'] = 'Over ' . $this->maxNormalizeItemCount . ' items ('.count($data).' total), aborting normalization';
- break;
- }
-
- $normalized[$key] = $this->normalize($value, $depth + 1);
- }
-
- return $normalized;
- }
-
- if ($data instanceof \DateTimeInterface) {
- return $this->formatDate($data);
- }
-
- if (is_object($data)) {
- if ($data instanceof Throwable) {
- return $this->normalizeException($data, $depth);
- }
-
- if ($data instanceof \JsonSerializable) {
- /** @var null|scalar|array $value */
- $value = $data->jsonSerialize();
- } elseif (\get_class($data) === '__PHP_Incomplete_Class') {
- $accessor = new \ArrayObject($data);
- $value = (string) $accessor['__PHP_Incomplete_Class_Name'];
- } elseif (method_exists($data, '__toString')) {
- /** @var string $value */
- $value = $data->__toString();
- } else {
- // the rest is normalized by json encoding and decoding it
- /** @var null|scalar|array $value */
- $value = json_decode($this->toJson($data, true), true);
- }
-
- return [Utils::getClass($data) => $value];
- }
-
- if (is_resource($data)) {
- return sprintf('[resource(%s)]', get_resource_type($data));
- }
-
- return '[unknown('.gettype($data).')]';
- }
-
- /**
- * @return mixed[]
- */
- protected function normalizeException(Throwable $e, int $depth = 0)
- {
- if ($depth > $this->maxNormalizeDepth) {
- return ['Over ' . $this->maxNormalizeDepth . ' levels deep, aborting normalization'];
- }
-
- if ($e instanceof \JsonSerializable) {
- return (array) $e->jsonSerialize();
- }
-
- $data = [
- 'class' => Utils::getClass($e),
- 'message' => $e->getMessage(),
- 'code' => (int) $e->getCode(),
- 'file' => $e->getFile().':'.$e->getLine(),
- ];
-
- if ($e instanceof \SoapFault) {
- if (isset($e->faultcode)) {
- $data['faultcode'] = $e->faultcode;
- }
-
- if (isset($e->faultactor)) {
- $data['faultactor'] = $e->faultactor;
- }
-
- if (isset($e->detail)) {
- if (is_string($e->detail)) {
- $data['detail'] = $e->detail;
- } elseif (is_object($e->detail) || is_array($e->detail)) {
- $data['detail'] = $this->toJson($e->detail, true);
- }
- }
- }
-
- $trace = $e->getTrace();
- foreach ($trace as $frame) {
- if (isset($frame['file'], $frame['line'])) {
- $data['trace'][] = $frame['file'].':'.$frame['line'];
- }
- }
-
- if (($previous = $e->getPrevious()) instanceof \Throwable) {
- $data['previous'] = $this->normalizeException($previous, $depth + 1);
- }
-
- return $data;
- }
-
- /**
- * Return the JSON representation of a value
- *
- * @param mixed $data
- * @throws \RuntimeException if encoding fails and errors are not ignored
- * @return string if encoding fails and ignoreErrors is true 'null' is returned
- */
- protected function toJson($data, bool $ignoreErrors = false): string
- {
- return Utils::jsonEncode($data, $this->jsonEncodeOptions, $ignoreErrors);
- }
-
- protected function formatDate(\DateTimeInterface $date): string
- {
- // in case the date format isn't custom then we defer to the custom DateTimeImmutable
- // formatting logic, which will pick the right format based on whether useMicroseconds is on
- if ($this->dateFormat === self::SIMPLE_DATE && $date instanceof DateTimeImmutable) {
- return (string) $date;
- }
-
- return $date->format($this->dateFormat);
- }
-
- /**
- * @return $this
- */
- public function addJsonEncodeOption(int $option): self
- {
- $this->jsonEncodeOptions |= $option;
-
- return $this;
- }
-
- /**
- * @return $this
- */
- public function removeJsonEncodeOption(int $option): self
- {
- $this->jsonEncodeOptions &= ~$option;
-
- return $this;
- }
-}
diff --git a/fixtures/symfony_5_local_deps/vendor/monolog/monolog/src/Monolog/Formatter/ScalarFormatter.php b/fixtures/symfony_5_local_deps/vendor/monolog/monolog/src/Monolog/Formatter/ScalarFormatter.php
deleted file mode 100644
index 4bc20a08c..000000000
--- a/fixtures/symfony_5_local_deps/vendor/monolog/monolog/src/Monolog/Formatter/ScalarFormatter.php
+++ /dev/null
@@ -1,49 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Monolog\Formatter;
-
-use Monolog\LogRecord;
-
-/**
- * Formats data into an associative array of scalar (+ null) values.
- * Objects and arrays will be JSON encoded.
- *
- * @author Andrew Lawson