| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 | /* Language: Groovy Author: Guillaume Laforge <[email protected]> Website: http://glaforge.appspot.com Description: Groovy programming language implementation inspired from Vsevolod's Java mode */function(hljs) {    return {        keywords: {            literal : 'true false null',            keyword:            'byte short char int long boolean float double void ' +            // 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 : [                      {                          // eat up @'s in emails to prevent them to be recognized as doctags                          begin: /\w+@/, relevance: 0                      },                      {                          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: 'meta',                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: 'meta', 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: 'symbol', begin: '^\\s*[A-Za-z0-9_$]+:',                relevance: 0            }        ],        illegal: /#|<\//    }}
 |