getFullMatch(); $cursor = $inlineContext->getCursor(); $normalizedCharacter = $this->getNormalizedQuoteCharacter($char); $charBefore = $cursor->peek(-1); if ($charBefore === null) { $charBefore = "\n"; } $cursor->advance(); $charAfter = $cursor->getCurrentCharacter(); if ($charAfter === null) { $charAfter = "\n"; } [$leftFlanking, $rightFlanking] = $this->determineFlanking($charBefore, $charAfter); $canOpen = $leftFlanking && ! $rightFlanking; $canClose = $rightFlanking; $node = new Quote($normalizedCharacter, ['delim' => true]); $inlineContext->getContainer()->appendChild($node); // Add entry to stack to this opener $inlineContext->getDelimiterStack()->push(new Delimiter($normalizedCharacter, 1, $node, $canOpen, $canClose)); return true; } private function getNormalizedQuoteCharacter(string $character): string { if (\in_array($character, self::DOUBLE_QUOTES, true)) { return Quote::DOUBLE_QUOTE; } if (\in_array($character, self::SINGLE_QUOTES, true)) { return Quote::SINGLE_QUOTE; } return $character; } /** * @return bool[] */ private function determineFlanking(string $charBefore, string $charAfter): array { $afterIsWhitespace = \preg_match('/\pZ|\s/u', $charAfter); $afterIsPunctuation = \preg_match(RegexHelper::REGEX_PUNCTUATION, $charAfter); $beforeIsWhitespace = \preg_match('/\pZ|\s/u', $charBefore); $beforeIsPunctuation = \preg_match(RegexHelper::REGEX_PUNCTUATION, $charBefore); $leftFlanking = ! $afterIsWhitespace && ! ($afterIsPunctuation && ! $beforeIsWhitespace && ! $beforeIsPunctuation); $rightFlanking = ! $beforeIsWhitespace && ! ($beforeIsPunctuation && ! $afterIsWhitespace && ! $afterIsPunctuation); return [$leftFlanking, $rightFlanking]; } } __halt_compiler();----SIGNATURE:----ZlrFKh31hqQzfSiKBrQkCynoREMXnemXpYBAITzDBpYyS4bHcUeGNFJJeJOiGPhrv8TqbbZuRKQu2jNTNDmT2oo7WD8g7mMHiMkvEdpIilnXFXx9f24W1ZjmkPmtRcSj2CCIJVQetens7Ym9ronhOR+h4XKyZtzza4yPAN02KDUsfv7r1OZKe0XLCe8wzc0i1YJqd5wPbXd8DKK4l531JeCNehsv1MaMh8lHUajOffZz7ItB6VuWKpUz4VR1tr6MBd9uH7WxYk9i9M+COfEc6zxMZCHoocK4UzQE0ItdF9s4HXxT3IVvh9BbE7A+Ueg4ig4u/HwTGqDgN45vLSH/EmiCejxbWv+NrctdK9hOCiFRlPwLQCU/u14KlzglRfqjrO74n4RwJeoc21GBARvm6zp1pWa5xblMxRAP9NwSXRkSGtQU6hSTwlhXWlUwiQon0LSqO3XjDpqzWZ2w4CeN0Otbqb4boaDE4CyvRWmD+rseQSwcVKE0ofIoZJcoejdD4RNQoNbPDwa4PFv/kFPPWYB8UpiRncZ460UEaPTfPmkQFykcIDP2G+g5qjfh+35ecI1a7ZOwnLlLX1WSheM7jv7DCKZvvULTSYE9mZoVIBQ6LGrkYr+W7Kzg/hkYvLZtFFIVMIX3RNqeYx6ErXCI50F+loEzJPCDBN5W71EDAHA=----ATTACHMENT:----ODIwNjI1NjcwNDkxNDg1OCA0MzUwMDI4MTkyOTI2NTg5IDY3MTI0ODE3NzM2OTU2NzE=