Supports "dollar-slashy" string syntax introduced in Groovy 1.8. Also some fixes for compatibility with latest version of Prism.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
diff --git a/components/prism-groovy.js b/components/prism-groovy.js
index 61a6588..4b14e37 100644
--- a/components/prism-groovy.js
+++ b/components/prism-groovy.js
@@ -1,24 +1,37 @@
Prism.languages.groovy = Prism.languages.extend('clike', {
'keyword': /\b(as|def|in|abstract|assert|boolean|break|byte|case|catch|char|class|const|continue|default|do|double|else|enum|extends|final|finally|float|for|goto|if|implements|import|instanceof|int|interface|long|native|new|package|private|protected|public|return|short|static|strictfp|super|switch|synchronized|this|throw|throws|trait|transient|try|void|volatile|while)\b/g,
- 'string': /("""|''')[\W\w]*?\1|("|'|\/)[\W\w]*?\2/g,
+ 'string': /("""|''')[\W\w]*?\1|("|'|\/)[\W\w]*?\2|(\$\/)(\$\/\$|[\W\w])*?\/\$/g,
'number': /\b0b[01_]+\b|\b0x[\da-f_]+(\.[\da-f_p\-]+)?\b|\b[\d_]+(\.[\d_]+[e]?[\d]*)?[glidf]\b|[\d_]+(\.[\d_]+)?\b/gi,
- 'operator': /={0,2}~|\?\.|\*?\.@|\.&|\.(?=\w)|\.{2}(<)?(?=\w)|->|\?:|[-+]{1,2}|!|<=>|(>){1,3}|(<){1,2}|={1,2}|(&){1,2}|\|{1,2}|\?|\*{1,2}|\/|\^|%/g,
- 'punctuation': /\.+|[{}[\];(),:$]/g,
- 'annotation': /@\w+/
+ 'operator': {
+ pattern: /(^|[^.])(={0,2}~|\?\.|\*?\.@|\.&|\.{1,2}(?!\.)|\.{2}(<)?(?=\w)|->|\?:|[-+]{1,2}|!|<=>|>{1,3}|(<){1,2}|={1,2}|(&){1,2}|\|{1,2}|\?|\*{1,2}|\/|\^|%)/g,
+ lookbehind: true
+ },
+ 'punctuation': /\.+|[{}[\];(),:$]/g
});
Prism.languages.insertBefore('groovy', 'punctuation', {
'spock-block': /\b(setup|given|when|then|and|cleanup|expect|where):/g
});
+Prism.languages.insertBefore('groovy', 'function', {
+ 'annotation': {
+ pattern: /(^|[^.])@\w+/,
+ lookbehind: true
+ }
+});
+
Prism.hooks.add('wrap', function(env) {
if (env.language === 'groovy' && env.type === 'string') {
var delimiter = env.content[0];
if (delimiter != "'") {
+ var pattern = /([^\\])(\$(\{.*?\}|[\w\.]+))/;
+ if (delimiter === '$') {
+ pattern = /([^\$])(\$(\{.*?\}|[\w\.]+))/;
+ }
env.content = Prism.highlight(env.content, {
'expression': {
- pattern: /([^\\])(\$(\{.*?\}|[\w\.]*))/,
+ pattern: pattern,
lookbehind: true,
inside: Prism.languages.groovy
}
diff --git a/components/prism-groovy.min.js b/components/prism-groovy.min.js
index 84c8e3c..3754dc1 100644
--- a/components/prism-groovy.min.js
+++ b/components/prism-groovy.min.js
@@ -1 +1 @@
-Prism.languages.groovy=Prism.languages.extend("clike",{keyword:/\b(as|def|in|abstract|assert|boolean|break|byte|case|catch|char|class|const|continue|default|do|double|else|enum|extends|final|finally|float|for|goto|if|implements|import|instanceof|int|interface|long|native|new|package|private|protected|public|return|short|static|strictfp|super|switch|synchronized|this|throw|throws|trait|transient|try|void|volatile|while)\b/g,string:/("""|''')[\W\w]*?\1|("|'|\/)[\W\w]*?\2/g,number:/\b0b[01_]+\b|\b0x[\da-f_]+(\.[\da-f_p\-]+)?\b|\b[\d_]+(\.[\d_]+[e]?[\d]*)?[glidf]\b|[\d_]+(\.[\d_]+)?\b/gi,operator:/={0,2}~|\?\.|\*?\.@|\.&|\.(?=\w)|\.{2}(<)?(?=\w)|->|\?:|[-+]{1,2}|!|<=>|(>){1,3}|(<){1,2}|={1,2}|(&){1,2}|\|{1,2}|\?|\*{1,2}|\/|\^|%/g,punctuation:/\.+|[{}[\];(),:$]/g,annotation:/@\w+/});Prism.languages.insertBefore("groovy","punctuation",{"spock-block":/\b(setup|given|when|then|and|cleanup|expect|where):/g});Prism.hooks.add("wrap",function(e){if(e.language==="groovy"&&e.type==="string"){var t=e.content[0];if(t!="'"){e.content=Prism.highlight(e.content,{expression:{pattern:/([^\\])(\$(\{.*?\}|[\w\.]*))/,lookbehind:!0,inside:Prism.languages.groovy}});e.classes.push(t==="/"?"regex":"gstring")}}});
+Prism.languages.groovy=Prism.languages.extend("clike",{keyword:/\b(as|def|in|abstract|assert|boolean|break|byte|case|catch|char|class|const|continue|default|do|double|else|enum|extends|final|finally|float|for|goto|if|implements|import|instanceof|int|interface|long|native|new|package|private|protected|public|return|short|static|strictfp|super|switch|synchronized|this|throw|throws|trait|transient|try|void|volatile|while)\b/g,string:/("""|''')[\W\w]*?\1|("|'|\/)[\W\w]*?\2|(\$\/)(\$\/\$|[\W\w])*?\/\$/g,number:/\b0b[01_]+\b|\b0x[\da-f_]+(\.[\da-f_p\-]+)?\b|\b[\d_]+(\.[\d_]+[e]?[\d]*)?[glidf]\b|[\d_]+(\.[\d_]+)?\b/gi,operator:{pattern:/(^|[^.])(={0,2}~|\?\.|\*?\.@|\.&|\.{1,2}(?!\.)|\.{2}(<)?(?=\w)|->|\?:|[-+]{1,2}|!|<=>|>{1,3}|(<){1,2}|={1,2}|(&){1,2}|\|{1,2}|\?|\*{1,2}|\/|\^|%)/g,lookbehind:true},punctuation:/\.+|[{}[\];(),:$]/g});Prism.languages.insertBefore("groovy","punctuation",{"spock-block":/\b(setup|given|when|then|and|cleanup|expect|where):/g});Prism.languages.insertBefore("groovy","function",{annotation:{pattern:/(^|[^.])@\w+/,lookbehind:true}});Prism.hooks.add("wrap",function(e){if(e.language==="groovy"&&e.type==="string"){var t=e.content[0];if(t!="'"){var n=/([^\\])(\$(\{.*?\}|[\w\.]+))/;if(t==="$"){n=/([^\$])(\$(\{.*?\}|[\w\.]+))/}e.content=Prism.highlight(e.content,{expression:{pattern:n,lookbehind:true,inside:Prism.languages.groovy}});e.classes.push(t==="/"?"regex":"gstring")}}});