From 8fe1c9a30d5a361f072ea33028f44c3101e3586e Mon Sep 17 00:00:00 2001 From: Timur Kamaev Date: Sat, 17 Dec 2022 23:15:52 +0500 Subject: [PATCH 1/4] PHP NOWDOC Support --- src/languages/php.js | 7 ++++++- test/markup/php/strings.expect.txt | 11 +++++++++++ test/markup/php/strings.txt | 10 ++++++++++ 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/languages/php.js b/src/languages/php.js index f0e5f8ef68..42ef519844 100644 --- a/src/languages/php.js +++ b/src/languages/php.js @@ -56,6 +56,10 @@ export default function(hljs) { end: /[ \t]*(\w+)\b/, contains: hljs.QUOTE_STRING_MODE.contains.concat(SUBST), }); + const NOWDOC = hljs.END_SAME_AS_BEGIN({ + begin: /<<<[ \t']*(\w+)'?\n/, + end: /[ \t]*(\w+)\b/, + }); // list of valid whitespaces because non-breaking space might be part of a IDENT_RE const WHITESPACE = '[ \t\n]'; const STRING = { @@ -63,7 +67,8 @@ export default function(hljs) { variants: [ DOUBLE_QUOTED, SINGLE_QUOTED, - HEREDOC + HEREDOC, + NOWDOC ] }; const NUMBER = { diff --git a/test/markup/php/strings.expect.txt b/test/markup/php/strings.expect.txt index 8a9c4dd8f5..05218571bf 100644 --- a/test/markup/php/strings.expect.txt +++ b/test/markup/php/strings.expect.txt @@ -21,3 +21,14 @@ SQL); SELECT * FROM table SQL); + +// nowdoc syntax + +$var = <<<'TEXT' + Hello {$person->name}! Welcome to $company! +TEXT; + +var_dump(<<<'TEXT' + Hello {$person->name}! Welcome to $company! + TEXT); + diff --git a/test/markup/php/strings.txt b/test/markup/php/strings.txt index d539d549a8..0ff7b0c2d7 100644 --- a/test/markup/php/strings.txt +++ b/test/markup/php/strings.txt @@ -21,3 +21,13 @@ var_dump(<<name}! Welcome to $company! +TEXT; + +var_dump(<<<'TEXT' + Hello {$person->name}! Welcome to $company! + TEXT); From c720639b9bbee41bb2da568638f5fd48a4083186 Mon Sep 17 00:00:00 2001 From: Kama Date: Sun, 18 Dec 2022 00:25:45 +0500 Subject: [PATCH 2/4] CHANGES.md --- CHANGES.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index 4bfb8f0cdd..88651439c8 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -4,7 +4,12 @@ Grammars: - enh(javascript) add sessionStorage to list of built-in variables [Jeroen van Vianen][] +Grammars: + +- enh(php) detect newer more flexible NOWdoc syntax (#3679) [Timur Kamaev][] + [Jeroen van Vianen]: https://github.com/morinel +[Timur Kamaev]: https://github.com/doiftrue ## Version 11.7.0 From 042d3d74a1354e2964fff0a4352e5f54999f9aea Mon Sep 17 00:00:00 2001 From: Kama Date: Sun, 18 Dec 2022 05:57:08 +0500 Subject: [PATCH 3/4] HEREDOC & NOWDOC regex improvements. Quote (") wrapper support added for HEREDOC >>> "EOL". --- src/languages/php.js | 4 ++-- test/markup/php/strings.expect.txt | 2 +- test/markup/php/strings.txt | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/languages/php.js b/src/languages/php.js index 42ef519844..f5dcc1f236 100644 --- a/src/languages/php.js +++ b/src/languages/php.js @@ -52,12 +52,12 @@ export default function(hljs) { contains: hljs.QUOTE_STRING_MODE.contains.concat(SUBST), }); const HEREDOC = hljs.END_SAME_AS_BEGIN({ - begin: /<<<[ \t]*(\w+)\n/, + begin: /<<<[ \t]*"?(\w+)"?\n/, end: /[ \t]*(\w+)\b/, contains: hljs.QUOTE_STRING_MODE.contains.concat(SUBST), }); const NOWDOC = hljs.END_SAME_AS_BEGIN({ - begin: /<<<[ \t']*(\w+)'?\n/, + begin: /<<<[ \t]*'(\w+)'\n/, end: /[ \t]*(\w+)\b/, }); // list of valid whitespaces because non-breaking space might be part of a IDENT_RE diff --git a/test/markup/php/strings.expect.txt b/test/markup/php/strings.expect.txt index 05218571bf..953138b52d 100644 --- a/test/markup/php/strings.expect.txt +++ b/test/markup/php/strings.expect.txt @@ -17,7 +17,7 @@ MSG); FROM table SQL); -var_dump(<<<SQL +var_dump(<<<"SQL" SELECT * FROM table SQL); diff --git a/test/markup/php/strings.txt b/test/markup/php/strings.txt index 0ff7b0c2d7..6e879722bf 100644 --- a/test/markup/php/strings.txt +++ b/test/markup/php/strings.txt @@ -17,7 +17,7 @@ var_dump(<< Date: Sun, 18 Dec 2022 07:37:51 +0500 Subject: [PATCH 4/4] HEREDOC quote (") wrapper support improvements. --- src/languages/php.js | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/languages/php.js b/src/languages/php.js index f5dcc1f236..13fde3abb5 100644 --- a/src/languages/php.js +++ b/src/languages/php.js @@ -51,11 +51,15 @@ export default function(hljs) { illegal: null, contains: hljs.QUOTE_STRING_MODE.contains.concat(SUBST), }); - const HEREDOC = hljs.END_SAME_AS_BEGIN({ - begin: /<<<[ \t]*"?(\w+)"?\n/, + + const HEREDOC = { + begin: /<<<[ \t]*(?:(\w+)|"(\w+)")\n/, end: /[ \t]*(\w+)\b/, contains: hljs.QUOTE_STRING_MODE.contains.concat(SUBST), - }); + 'on:begin': (m, resp) => { resp.data._beginMatch = m[1] || m[2]; }, + 'on:end': (m, resp) => { if (resp.data._beginMatch !== m[1]) resp.ignoreMatch(); }, + }; + const NOWDOC = hljs.END_SAME_AS_BEGIN({ begin: /<<<[ \t]*'(\w+)'\n/, end: /[ \t]*(\w+)\b/,