diff --git a/src/Languages/Base/Injections/DeletionInjection.php b/src/Languages/Base/Injections/DeletionInjection.php index f2e5475..7b96959 100644 --- a/src/Languages/Base/Injections/DeletionInjection.php +++ b/src/Languages/Base/Injections/DeletionInjection.php @@ -22,7 +22,7 @@ public function parse(string $content, Highlighter $highlighter): ParsedInjectio $content = str_replace('❷span class=❹ignore❹❸{-❷/span❸', '{-', $content); $content = str_replace('❷span class=❹ignore❹❸-}❷/span❸', '-}', $content); - preg_match_all('/(\{-)(?!-)((.|\n)*?)(-})/', $content, $matches, PREG_OFFSET_CAPTURE); + preg_match_all('/(?\-})/'; + return '/(?\-})(?!})/'; } public function getTokenType(): TokenType diff --git a/src/Languages/Base/Patterns/DeletionStartTokenPattern.php b/src/Languages/Base/Patterns/DeletionStartTokenPattern.php index 7a7977d..8ed79d3 100644 --- a/src/Languages/Base/Patterns/DeletionStartTokenPattern.php +++ b/src/Languages/Base/Patterns/DeletionStartTokenPattern.php @@ -12,13 +12,14 @@ #[PatternTest('{- pull_request_target: -}', '{-')] #[PatternTest('{-- pull_request_target: --}', null)] +#[PatternTest('{{- variable -}}', null)] final readonly class DeletionStartTokenPattern implements Pattern { use IsPattern; public function getPattern(): string { - return '/(?{\-)(?!-)/'; + return '/(?{\-)(?!-)/'; } public function getTokenType(): TokenType diff --git a/tests/Languages/Base/Injections/DeletionInjectionTest.php b/tests/Languages/Base/Injections/DeletionInjectionTest.php index 1986b5a..eb8fdc5 100644 --- a/tests/Languages/Base/Injections/DeletionInjectionTest.php +++ b/tests/Languages/Base/Injections/DeletionInjectionTest.php @@ -25,4 +25,31 @@ public function test_deletion_injection() $this->assertSame($expected, Escape::html($parsedInjection->content)); } + + public function test_deletion_not_triggered_by_twig_whitespace_control() + { + $content = '{{- block(outerBlocks.content) -}}'; + + $parsedInjection = (new DeletionInjection())->parse($content, new Highlighter()); + + $this->assertSame($content, $parsedInjection->content); + } + + public function test_deletion_not_triggered_when_preceded_by_brace() + { + $content = '{{- variable -}}'; + + $parsedInjection = (new DeletionInjection())->parse($content, new Highlighter()); + + $this->assertSame($content, $parsedInjection->content); + } + + public function test_deletion_not_triggered_by_tag_whitespace_control() + { + $content = '{%- if true -%}'; + + $parsedInjection = (new DeletionInjection())->parse($content, new Highlighter()); + + $this->assertSame($content, $parsedInjection->content); + } } diff --git a/tests/Languages/Twig/TwigLanguageTest.php b/tests/Languages/Twig/TwigLanguageTest.php index f86364b..bf8a8a3 100644 --- a/tests/Languages/Twig/TwigLanguageTest.php +++ b/tests/Languages/Twig/TwigLanguageTest.php @@ -39,6 +39,7 @@ public static function provide_highlight_cases(): iterable ['', '<script>const mainSearchUrl = "";</script>'], ['{% cache "cache key" %}', '{% cache "cache key" %}'], ['{{ "foobar"|data_uri(mime="text/html", parameters={charset: "ascii"}) }}', '{{ "<b>foobar</b>"|data_uri(mime="text/html", parameters={charset: "ascii"}) }}'], + ['{{- block(outerBlocks.content) -}}', '{{- block(outerBlocks.content) -}}'], ]; } }