| OLD | NEW |
| 1 /* TODO | 1 /* TODO |
| 2 Add support for variables inside double quoted strings | 2 Add support for variables inside double quoted strings |
| 3 Add support for {php} | 3 Add support for {php} |
| 4 */ | 4 */ |
| 5 | 5 |
| 6 (function(Prism) { | 6 (function(Prism) { |
| 7 | 7 |
| 8 var smarty_pattern = /\{\*[\w\W]+?\*\}|\{[\w\W]+?\}/g; | 8 var smarty_pattern = /\{\*[\w\W]+?\*\}|\{[\w\W]+?\}/g; |
| 9 var smarty_litteral_start = '{literal}'; | 9 var smarty_litteral_start = '{literal}'; |
| 10 var smarty_litteral_end = '{/literal}'; | 10 var smarty_litteral_end = '{/literal}'; |
| 11 var smarty_litteral_mode = false; | 11 var smarty_litteral_mode = false; |
| 12 | 12 |
| 13 Prism.languages.smarty = Prism.languages.extend('markup', { | 13 Prism.languages.smarty = Prism.languages.extend('markup', { |
| 14 'smarty': { | 14 'smarty': { |
| 15 pattern: smarty_pattern, | 15 pattern: smarty_pattern, |
| 16 inside: { | 16 inside: { |
| 17 'delimiter': { | 17 'delimiter': { |
| 18 pattern: /^\{|\}$/i, | 18 pattern: /^\{|\}$/i, |
| 19 alias: 'punctuation' | 19 alias: 'punctuation' |
| 20 }, | 20 }, |
| 21 » » » » 'string': /(["'])(\\?.)*?\1/, | 21 » » » » 'string': /(["'])(?:\\?.)*?\1/, |
| 22 » » » » 'number': /\b-?(0x[\dA-Fa-f]+|\d*\.?\d+([Ee]-?\d
+)?)\b/, | 22 » » » » 'number': /\b-?(?:0x[\dA-Fa-f]+|\d*\.?\d+(?:[Ee]
[-+]?\d+)?)\b/, |
| 23 'variable': [ | 23 'variable': [ |
| 24 /\$(?!\d)\w+/, | 24 /\$(?!\d)\w+/, |
| 25 /#(?!\d)\w+#/, | 25 /#(?!\d)\w+#/, |
| 26 { | 26 { |
| 27 pattern: /(\.|->)(?!\d)\w+/, | 27 pattern: /(\.|->)(?!\d)\w+/, |
| 28 lookbehind: true | 28 lookbehind: true |
| 29 }, | 29 }, |
| 30 { | 30 { |
| 31 pattern: /(\[)(?!\d)\w+(?=\])/, | 31 pattern: /(\[)(?!\d)\w+(?=\])/, |
| 32 lookbehind: true | 32 lookbehind: true |
| 33 } | 33 } |
| 34 ], | 34 ], |
| 35 'function': [ | 35 'function': [ |
| 36 { | 36 { |
| 37 pattern: /(\|\s*)@?(?!\d)\w+/, | 37 pattern: /(\|\s*)@?(?!\d)\w+/, |
| 38 lookbehind: true | 38 lookbehind: true |
| 39 }, | 39 }, |
| 40 /^\/?(?!\d)\w+/, | 40 /^\/?(?!\d)\w+/, |
| 41 /(?!\d)\w+(?=\()/ | 41 /(?!\d)\w+(?=\()/ |
| 42 ], | 42 ], |
| 43 'attr-name': { | 43 'attr-name': { |
| 44 // Value is made optional because it may
have already been tokenized | 44 // Value is made optional because it may
have already been tokenized |
| 45 pattern: /\w+\s*=\s*(?:(?!\d)\w+)?/, | 45 pattern: /\w+\s*=\s*(?:(?!\d)\w+)?/, |
| 46 inside: { | 46 inside: { |
| 47 "variable": { | 47 "variable": { |
| 48 pattern: /(=\s*)(?!\d)\w
+/, | 48 pattern: /(=\s*)(?!\d)\w
+/, |
| 49 lookbehind: true | 49 lookbehind: true |
| 50 }, | 50 }, |
| 51 » » » » » » "punctuation": /=/ | 51 » » » » » » "operator": /=/ |
| 52 } | 52 } |
| 53 }, | 53 }, |
| 54 » » » » 'punctuation': /[\[\]().,=\|:`]|\->/, | 54 » » » » 'punctuation': [ |
| 55 » » » » » /[\[\]().,:`]|\->/ |
| 56 » » » » ], |
| 55 'operator': [ | 57 'operator': [ |
| 56 » » » » » /[+\-*\/%]|===?|[!<>]=?|&&|\|\|/, | 58 » » » » » /[+\-*\/%]|==?=?|[!<>]=?|&&|\|\|?/, |
| 57 /\bis\s+(?:not\s+)?(?:div|even|odd)(?:\s
+by)?\b/, | 59 /\bis\s+(?:not\s+)?(?:div|even|odd)(?:\s
+by)?\b/, |
| 58 /\b(?:eq|neq?|gt|lt|gt?e|lt?e|not|mod|or
|and)\b/ | 60 /\b(?:eq|neq?|gt|lt|gt?e|lt?e|not|mod|or
|and)\b/ |
| 59 ], | 61 ], |
| 60 'keyword': /\b(?:false|off|on|no|true|yes)\b/ | 62 'keyword': /\b(?:false|off|on|no|true|yes)\b/ |
| 61 } | 63 } |
| 62 } | 64 } |
| 63 }); | 65 }); |
| 64 | 66 |
| 65 // Comments are inserted at top so that they can | 67 // Comments are inserted at top so that they can |
| 66 // surround markup | 68 // surround markup |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 108 }); | 110 }); |
| 109 | 111 |
| 110 // Re-insert the tokens after highlighting | 112 // Re-insert the tokens after highlighting |
| 111 // and highlight them with defined grammar | 113 // and highlight them with defined grammar |
| 112 Prism.hooks.add('after-highlight', function(env) { | 114 Prism.hooks.add('after-highlight', function(env) { |
| 113 if (env.language !== 'smarty') { | 115 if (env.language !== 'smarty') { |
| 114 return; | 116 return; |
| 115 } | 117 } |
| 116 | 118 |
| 117 for (var i = 0, t; t = env.tokenStack[i]; i++) { | 119 for (var i = 0, t; t = env.tokenStack[i]; i++) { |
| 118 » » » env.highlightedCode = env.highlightedCode.replace('___SM
ARTY' + (i + 1) + '___', Prism.highlight(t, env.grammar, 'smarty')); | 120 » » » // The replace prevents $$, $&, $`, $', $n, $nn from bei
ng interpreted as special patterns |
| 121 » » » env.highlightedCode = env.highlightedCode.replace('___SM
ARTY' + (i + 1) + '___', Prism.highlight(t, env.grammar, 'smarty').replace(/\$/g
, '$$$$')); |
| 119 } | 122 } |
| 120 | 123 |
| 121 env.element.innerHTML = env.highlightedCode; | 124 env.element.innerHTML = env.highlightedCode; |
| 122 }); | 125 }); |
| 123 | 126 |
| 124 }(Prism)); | 127 }(Prism)); |
| OLD | NEW |