module.exports = function(hljs) { return { keywords: { typename: 'byte short char int long boolean float double void', literal : 'true false null', keyword: // groovy specific keywords 'def as in assert trait ' + // common keywords with Java 'super this abstract static volatile transient public private protected synchronized final ' + 'class interface enum if else for while switch case break default continue ' + 'throw throws try catch finally implements extends new import package return instanceof' }, contains: [ hljs.COMMENT( '/\\*\\*', '\\*/', { relevance : 0, contains : [{ className : 'doctag', begin : '@[A-Za-z]+' }] } ), hljs.C_LINE_COMMENT_MODE, hljs.C_BLOCK_COMMENT_MODE, { className: 'string', begin: '"""', end: '"""' }, { className: 'string', begin: "'''", end: "'''" }, { className: 'string', begin: "\\$/", end: "/\\$", relevance: 10 }, hljs.APOS_STRING_MODE, { className: 'regexp', begin: /~?\/[^\/\n]+\//, contains: [ hljs.BACKSLASH_ESCAPE ] }, hljs.QUOTE_STRING_MODE, { className: 'shebang', begin: "^#!/usr/bin/env", end: '$', illegal: '\n' }, hljs.BINARY_NUMBER_MODE, { className: 'class', beginKeywords: 'class interface trait enum', end: '{', illegal: ':', contains: [ {beginKeywords: 'extends implements'}, hljs.UNDERSCORE_TITLE_MODE, ] }, hljs.C_NUMBER_MODE, { className: 'annotation', begin: '@[A-Za-z]+' }, { // highlight map keys and named parameters as strings className: 'string', begin: /[^\?]{0}[A-Za-z0-9_$]+ *:/ }, { // catch middle element of the ternary operator // to avoid highlight it as a label, named parameter, or map key begin: /\?/, end: /\:/ }, { // highlight labeled statements className: 'label', begin: '^\\s*[A-Za-z0-9_$]+:', relevance: 0 }, ], illegal: /#/ } };