Skip to content

Commit

Permalink
enh(php) NOWDOC Support (#3679)
Browse files Browse the repository at this point in the history
* PHP NOWDOC Support
* HEREDOC & NOWDOC regex improvements. Quote (") wrapper support added for HEREDOC >>> "EOL".
* HEREDOC quote (") wrapper support improvements.
  • Loading branch information
doiftrue committed Mar 19, 2023
1 parent 857564c commit b33384d
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 5 deletions.
2 changes: 2 additions & 0 deletions CHANGES.md
Expand Up @@ -17,11 +17,13 @@ Grammars:
- added 3rd party Candid grammar to SUPPORTED_LANGUAGES [rvanasa][]
- fix(haskell) Added support for characters [CrystalSplitter][]
- enh(dart) Add `base`, `interface`, `sealed`, and `when` keywords [Sam Rawlins][]
- enh(php) detect newer more flexible NOWdoc syntax (#3679) [Timur Kamaev][]

Parser:

- add removePlugin api [faga295][]

[Timur Kamaev]: https://github.com/doiftrue
[WisamMechano]: https://github.com/wisammechano
[faga295]: https://github.com/faga295
[AdamRaichu]: https://github.com/AdamRaichu
Expand Down
15 changes: 12 additions & 3 deletions src/languages/php.js
Expand Up @@ -51,10 +51,18 @@ 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/,
});
// list of valid whitespaces because non-breaking space might be part of a IDENT_RE
const WHITESPACE = '[ \t\n]';
Expand All @@ -63,7 +71,8 @@ export default function(hljs) {
variants: [
DOUBLE_QUOTED,
SINGLE_QUOTED,
HEREDOC
HEREDOC,
NOWDOC
]
};
const NUMBER = {
Expand Down
13 changes: 12 additions & 1 deletion test/markup/php/strings.expect.txt
Expand Up @@ -17,7 +17,18 @@ MSG</span>);
FROM table
SQL</span>);

<span class="hljs-title function_ invoke__">var_dump</span>(<span class="hljs-string">&lt;&lt;&lt;SQL
<span class="hljs-title function_ invoke__">var_dump</span>(<span class="hljs-string">&lt;&lt;&lt;&quot;SQL&quot;
SELECT *
FROM table
SQL</span>);

<span class="hljs-comment">// nowdoc syntax</span>

<span class="hljs-variable">$var</span> = <span class="hljs-string">&lt;&lt;&lt;&#x27;TEXT&#x27;
Hello {$person-&gt;name}! Welcome to $company!
TEXT</span>;

<span class="hljs-title function_ invoke__">var_dump</span>(<span class="hljs-string">&lt;&lt;&lt;&#x27;TEXT&#x27;
Hello {$person-&gt;name}! Welcome to $company!
TEXT</span>);

12 changes: 11 additions & 1 deletion test/markup/php/strings.txt
Expand Up @@ -17,7 +17,17 @@ var_dump(<<<SQL
FROM table
SQL);

var_dump(<<<SQL
var_dump(<<<"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);

0 comments on commit b33384d

Please sign in to comment.