Skip to content

Commit

Permalink
JavaScript: Add support for one level of nesting inside template stri…
Browse files Browse the repository at this point in the history
…ngs. Fix #1397
  • Loading branch information
Golmote committed Apr 22, 2018
1 parent d95f8fb commit db2d0eb
Show file tree
Hide file tree
Showing 5 changed files with 33 additions and 13 deletions.
9 changes: 5 additions & 4 deletions components/prism-javascript.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,23 +22,24 @@ Prism.languages.insertBefore('javascript', 'keyword', {

Prism.languages.insertBefore('javascript', 'string', {
'template-string': {
pattern: /`(?:\\[\s\S]|[^\\`])*`/,
pattern: /`(?:\\[\s\S]|\${[^}]+}|[^\\`])*`/,
greedy: true,
inside: {
'interpolation': {
pattern: /\$\{[^}]+\}/,
pattern: /\${[^}]+}/,
inside: {
'interpolation-punctuation': {
pattern: /^\$\{|\}$/,
pattern: /^\${|}$/,
alias: 'punctuation'
},
rest: Prism.languages.javascript
rest: null // See below
}
},
'string': /[\s\S]+/
}
}
});
Prism.languages.javascript['template-string'].inside['interpolation'].inside.rest = Prism.languages.javascript;

if (Prism.languages.markup) {
Prism.languages.insertBefore('markup', 'tag', {
Expand Down
2 changes: 1 addition & 1 deletion components/prism-javascript.min.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 1 addition & 4 deletions examples/prism-javascript.html
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,4 @@ <h2>Known failures</h2>

<h3>String interpolation containing a closing brace</h3>
<pre><code>`${ {foo:'bar'}.foo }`
`${ '}' }`</code></pre>

<h3>String interpolation containing an unescaped back-tick</h3>
<pre><code>`${ '`' }`</code></pre>
`${ '}' }`</code></pre>
9 changes: 5 additions & 4 deletions prism.js
Original file line number Diff line number Diff line change
Expand Up @@ -745,23 +745,24 @@ Prism.languages.insertBefore('javascript', 'keyword', {

Prism.languages.insertBefore('javascript', 'string', {
'template-string': {
pattern: /`(?:\\[\s\S]|[^\\`])*`/,
pattern: /`(?:\\[\s\S]|\${[^}]+}|[^\\`])*`/,
greedy: true,
inside: {
'interpolation': {
pattern: /\$\{[^}]+\}/,
pattern: /\${[^}]+}/,
inside: {
'interpolation-punctuation': {
pattern: /^\$\{|\}$/,
pattern: /^\${|}$/,
alias: 'punctuation'
},
rest: Prism.languages.javascript
rest: null // See below
}
},
'string': /[\s\S]+/
}
}
});
Prism.languages.javascript['template-string'].inside['interpolation'].inside.rest = Prism.languages.javascript;

if (Prism.languages.markup) {
Prism.languages.insertBefore('markup', 'tag', {
Expand Down
21 changes: 21 additions & 0 deletions tests/languages/javascript/issue1397.test
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
`${`a string`}`

----------------------------------------------------

[
["template-string", [
["string", "`"],
["interpolation", [
["interpolation-punctuation", "${"],
["template-string", [
["string", "`a string`"]
]],
["interpolation-punctuation", "}"]
]],
["string", "`"]
]]
]

----------------------------------------------------

Checks for nested template strings. See #1397

0 comments on commit db2d0eb

Please sign in to comment.