Skip to content

Commit 5df26e2

Browse files
committed
Check for possible pre-existing marker strings in Smarty
1 parent 7a1a404 commit 5df26e2

File tree

3 files changed

+18
-7
lines changed

3 files changed

+18
-7
lines changed

components/prism-smarty.js

+15-5
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
var smarty_litteral_start = '{literal}';
1010
var smarty_litteral_end = '{/literal}';
1111
var smarty_litteral_mode = false;
12-
12+
1313
Prism.languages.smarty = Prism.languages.extend('markup', {
1414
'smarty': {
1515
pattern: smarty_pattern,
@@ -93,9 +93,16 @@
9393
if(match === smarty_litteral_start) {
9494
smarty_litteral_mode = true;
9595
}
96-
env.tokenStack.push(match);
9796

98-
return '___SMARTY' + env.tokenStack.length + '___';
97+
var i = env.tokenStack.length;
98+
// Check for existing strings
99+
while (env.backupCode.indexOf('___SMARTY' + i + '___') !== -1)
100+
++i;
101+
102+
// Create a sparse array
103+
env.tokenStack[i] = match;
104+
105+
return '___SMARTY' + i + '___';
99106
}
100107
return match;
101108
});
@@ -116,9 +123,12 @@
116123
return;
117124
}
118125

119-
for (var i = 0, t; t = env.tokenStack[i]; i++) {
126+
for (var i = 0, keys = Object.keys(env.tokenStack); i < keys.length; ++i) {
127+
var k = keys[i];
128+
var t = env.tokenStack[k];
129+
120130
// The replace prevents $$, $&, $`, $', $n, $nn from being interpreted as special patterns
121-
env.highlightedCode = env.highlightedCode.replace('___SMARTY' + (i + 1) + '___', Prism.highlight(t, env.grammar, 'smarty').replace(/\$/g, '$$$$'));
131+
env.highlightedCode = env.highlightedCode.replace('___SMARTY' + k + '___', Prism.highlight(t, env.grammar, 'smarty').replace(/\$/g, '$$$$'));
122132
}
123133

124134
env.element.innerHTML = env.highlightedCode;

components/prism-smarty.min.js

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tests/languages/smarty/smarty_in_markup_feature.js

+2-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)