Skip to content

Commit b33384d

Browse files
authored
enh(php) NOWDOC Support (#3679)
* PHP NOWDOC Support * HEREDOC & NOWDOC regex improvements. Quote (") wrapper support added for HEREDOC >>> "EOL". * HEREDOC quote (") wrapper support improvements.
1 parent 857564c commit b33384d

File tree

4 files changed

+37
-5
lines changed

4 files changed

+37
-5
lines changed

CHANGES.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,13 @@ Grammars:
1717
- added 3rd party Candid grammar to SUPPORTED_LANGUAGES [rvanasa][]
1818
- fix(haskell) Added support for characters [CrystalSplitter][]
1919
- enh(dart) Add `base`, `interface`, `sealed`, and `when` keywords [Sam Rawlins][]
20+
- enh(php) detect newer more flexible NOWdoc syntax (#3679) [Timur Kamaev][]
2021

2122
Parser:
2223

2324
- add removePlugin api [faga295][]
2425

26+
[Timur Kamaev]: https://github.com/doiftrue
2527
[WisamMechano]: https://github.com/wisammechano
2628
[faga295]: https://github.com/faga295
2729
[AdamRaichu]: https://github.com/AdamRaichu

src/languages/php.js

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,18 @@ export default function(hljs) {
5151
illegal: null,
5252
contains: hljs.QUOTE_STRING_MODE.contains.concat(SUBST),
5353
});
54-
const HEREDOC = hljs.END_SAME_AS_BEGIN({
55-
begin: /<<<[ \t]*(\w+)\n/,
54+
55+
const HEREDOC = {
56+
begin: /<<<[ \t]*(?:(\w+)|"(\w+)")\n/,
5657
end: /[ \t]*(\w+)\b/,
5758
contains: hljs.QUOTE_STRING_MODE.contains.concat(SUBST),
59+
'on:begin': (m, resp) => { resp.data._beginMatch = m[1] || m[2]; },
60+
'on:end': (m, resp) => { if (resp.data._beginMatch !== m[1]) resp.ignoreMatch(); },
61+
};
62+
63+
const NOWDOC = hljs.END_SAME_AS_BEGIN({
64+
begin: /<<<[ \t]*'(\w+)'\n/,
65+
end: /[ \t]*(\w+)\b/,
5866
});
5967
// list of valid whitespaces because non-breaking space might be part of a IDENT_RE
6068
const WHITESPACE = '[ \t\n]';
@@ -63,7 +71,8 @@ export default function(hljs) {
6371
variants: [
6472
DOUBLE_QUOTED,
6573
SINGLE_QUOTED,
66-
HEREDOC
74+
HEREDOC,
75+
NOWDOC
6776
]
6877
};
6978
const NUMBER = {

test/markup/php/strings.expect.txt

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,18 @@ MSG</span>);
1717
FROM table
1818
SQL</span>);
1919

20-
<span class="hljs-title function_ invoke__">var_dump</span>(<span class="hljs-string">&lt;&lt;&lt;SQL
20+
<span class="hljs-title function_ invoke__">var_dump</span>(<span class="hljs-string">&lt;&lt;&lt;&quot;SQL&quot;
2121
SELECT *
2222
FROM table
2323
SQL</span>);
24+
25+
<span class="hljs-comment">// nowdoc syntax</span>
26+
27+
<span class="hljs-variable">$var</span> = <span class="hljs-string">&lt;&lt;&lt;&#x27;TEXT&#x27;
28+
Hello {$person-&gt;name}! Welcome to $company!
29+
TEXT</span>;
30+
31+
<span class="hljs-title function_ invoke__">var_dump</span>(<span class="hljs-string">&lt;&lt;&lt;&#x27;TEXT&#x27;
32+
Hello {$person-&gt;name}! Welcome to $company!
33+
TEXT</span>);
34+

test/markup/php/strings.txt

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,17 @@ var_dump(<<<SQL
1717
FROM table
1818
SQL);
1919

20-
var_dump(<<<SQL
20+
var_dump(<<<"SQL"
2121
SELECT *
2222
FROM table
2323
SQL);
24+
25+
// nowdoc syntax
26+
27+
$var = <<<'TEXT'
28+
Hello {$person->name}! Welcome to $company!
29+
TEXT;
30+
31+
var_dump(<<<'TEXT'
32+
Hello {$person->name}! Welcome to $company!
33+
TEXT);

0 commit comments

Comments
 (0)