93 lines
3 KiB
JavaScript
93 lines
3 KiB
JavaScript
|
module.exports = 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: /#|<\//
|
||
|
}
|
||
|
};
|