From d8f6c998314889666f531bd113b0f33045c1b773 Mon Sep 17 00:00:00 2001 From: Ed Grosvenor Date: Fri, 21 Jun 2024 13:03:21 +0100 Subject: [PATCH] Escape characters that will break blade parsing --- src/Actions/EnableLiveCode.php | 2 ++ src/Actions/EscapeBladeBreakingCharacters.php | 27 +++++++++++++++++++ src/Commands/GenerateCommand.php | 2 ++ 3 files changed, 31 insertions(+) create mode 100644 src/Actions/EscapeBladeBreakingCharacters.php diff --git a/src/Actions/EnableLiveCode.php b/src/Actions/EnableLiveCode.php index fccf13c..f1b73de 100644 --- a/src/Actions/EnableLiveCode.php +++ b/src/Actions/EnableLiveCode.php @@ -23,6 +23,8 @@ protected function enableLiveCode($line) if ($this->live) { $line->content = str_replace('', '', $line->content); $line->content = str_replace('', '', $line->content); + $line->content = str_replace('@@', '@', $line->content); + $line->content = str_replace('@{{', '{{', $line->content); $this->live = false; return $line; diff --git a/src/Actions/EscapeBladeBreakingCharacters.php b/src/Actions/EscapeBladeBreakingCharacters.php new file mode 100644 index 0000000..c79e8aa --- /dev/null +++ b/src/Actions/EscapeBladeBreakingCharacters.php @@ -0,0 +1,27 @@ +blade_files->each( + fn ($file) => $file->lines = $file->lines->map(fn ($line) => $this->addLiteral($line))); + + return $next($site); + } + + protected function addLiteral($line) + { + $line->content = str_replace('@', '@@', $line->content); + $line->content = str_replace('{{', '@{{', $line->content); + + + return $line; + + } +} diff --git a/src/Commands/GenerateCommand.php b/src/Commands/GenerateCommand.php index 96a929b..451abbe 100644 --- a/src/Commands/GenerateCommand.php +++ b/src/Commands/GenerateCommand.php @@ -10,6 +10,7 @@ use ArtisanBuild\Docsidian\Actions\EnsureAllHeadingsHaveAnId; use ArtisanBuild\Docsidian\Actions\GenerateOnPageNavigation; use ArtisanBuild\Docsidian\Actions\HandleWikiStyleImages; +use ArtisanBuild\Docsidian\Actions\EscapeBladeBreakingCharacters; use ArtisanBuild\Docsidian\Actions\RemoveEmptyParagraphs; use ArtisanBuild\Docsidian\Actions\SetBlockVisibility; use ArtisanBuild\Docsidian\Actions\SetPageVisibility; @@ -46,6 +47,7 @@ public function handle(): int Pipeline::send(new DocumentationSite($site)) ->through([ + EscapeBladeBreakingCharacters::class, BuildNavigation::class, SetPageVisibility::class, SetBlockVisibility::class,