|
9 | 9 | var smarty_litteral_start = '{literal}';
|
10 | 10 | var smarty_litteral_end = '{/literal}';
|
11 | 11 | var smarty_litteral_mode = false;
|
12 |
| - |
| 12 | + |
13 | 13 | Prism.languages.smarty = Prism.languages.extend('markup', {
|
14 | 14 | 'smarty': {
|
15 | 15 | pattern: smarty_pattern,
|
|
93 | 93 | if(match === smarty_litteral_start) {
|
94 | 94 | smarty_litteral_mode = true;
|
95 | 95 | }
|
96 |
| - env.tokenStack.push(match); |
97 | 96 |
|
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 + '___'; |
99 | 106 | }
|
100 | 107 | return match;
|
101 | 108 | });
|
|
116 | 123 | return;
|
117 | 124 | }
|
118 | 125 |
|
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 | + |
120 | 130 | // 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, '$$$$')); |
122 | 132 | }
|
123 | 133 |
|
124 | 134 | env.element.innerHTML = env.highlightedCode;
|
|
0 commit comments