You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
181 lines
5.2 KiB
181 lines
5.2 KiB
// https://docs.oracle.com/javase/specs/jls/se15/html/jls-3.html#jls-3.10 |
|
var decimalDigits = '[0-9](_*[0-9])*'; |
|
var frac = `\\.(${decimalDigits})`; |
|
var hexDigits = '[0-9a-fA-F](_*[0-9a-fA-F])*'; |
|
var NUMERIC = { |
|
className: 'number', |
|
variants: [ |
|
// DecimalFloatingPointLiteral |
|
// including ExponentPart |
|
{ begin: `(\\b(${decimalDigits})((${frac})|\\.)?|(${frac}))` + |
|
`[eE][+-]?(${decimalDigits})[fFdD]?\\b` }, |
|
// excluding ExponentPart |
|
{ begin: `\\b(${decimalDigits})((${frac})[fFdD]?\\b|\\.([fFdD]\\b)?)` }, |
|
{ begin: `(${frac})[fFdD]?\\b` }, |
|
{ begin: `\\b(${decimalDigits})[fFdD]\\b` }, |
|
|
|
// HexadecimalFloatingPointLiteral |
|
{ begin: `\\b0[xX]((${hexDigits})\\.?|(${hexDigits})?\\.(${hexDigits}))` + |
|
`[pP][+-]?(${decimalDigits})[fFdD]?\\b` }, |
|
|
|
// DecimalIntegerLiteral |
|
{ begin: '\\b(0|[1-9](_*[0-9])*)[lL]?\\b' }, |
|
|
|
// HexIntegerLiteral |
|
{ begin: `\\b0[xX](${hexDigits})[lL]?\\b` }, |
|
|
|
// OctalIntegerLiteral |
|
{ begin: '\\b0(_*[0-7])*[lL]?\\b' }, |
|
|
|
// BinaryIntegerLiteral |
|
{ begin: '\\b0[bB][01](_*[01])*[lL]?\\b' }, |
|
], |
|
relevance: 0 |
|
}; |
|
|
|
/* |
|
Language: Java |
|
Author: Vsevolod Solovyov <vsevolod.solovyov@gmail.com> |
|
Category: common, enterprise |
|
Website: https://www.java.com/ |
|
*/ |
|
|
|
function java(hljs) { |
|
var JAVA_IDENT_RE = '[\u00C0-\u02B8a-zA-Z_$][\u00C0-\u02B8a-zA-Z_$0-9]*'; |
|
var GENERIC_IDENT_RE = JAVA_IDENT_RE + '(<' + JAVA_IDENT_RE + '(\\s*,\\s*' + JAVA_IDENT_RE + ')*>)?'; |
|
var KEYWORDS = 'false synchronized int abstract float private char boolean var static null if const ' + |
|
'for true while long strictfp finally protected import native final void ' + |
|
'enum else break transient catch instanceof byte super volatile case assert short ' + |
|
'package default double public try this switch continue throws protected public private ' + |
|
'module requires exports do'; |
|
|
|
var ANNOTATION = { |
|
className: 'meta', |
|
begin: '@' + JAVA_IDENT_RE, |
|
contains: [ |
|
{ |
|
begin: /\(/, |
|
end: /\)/, |
|
contains: ["self"] // allow nested () inside our annotation |
|
}, |
|
] |
|
}; |
|
const NUMBER = NUMERIC; |
|
|
|
return { |
|
name: 'Java', |
|
aliases: ['jsp'], |
|
keywords: KEYWORDS, |
|
illegal: /<\/|#/, |
|
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]+' |
|
} |
|
] |
|
} |
|
), |
|
// relevance boost |
|
{ |
|
begin: /import java\.[a-z]+\./, |
|
keywords: "import", |
|
relevance: 2 |
|
}, |
|
hljs.C_LINE_COMMENT_MODE, |
|
hljs.C_BLOCK_COMMENT_MODE, |
|
hljs.APOS_STRING_MODE, |
|
hljs.QUOTE_STRING_MODE, |
|
{ |
|
className: 'class', |
|
beginKeywords: 'class interface enum', end: /[{;=]/, excludeEnd: true, |
|
// TODO: can this be removed somehow? |
|
// an extra boost because Java is more popular than other languages with |
|
// this same syntax feature (this is just to preserve our tests passing |
|
// for now) |
|
relevance: 1, |
|
keywords: 'class interface enum', |
|
illegal: /[:"\[\]]/, |
|
contains: [ |
|
{ beginKeywords: 'extends implements' }, |
|
hljs.UNDERSCORE_TITLE_MODE |
|
] |
|
}, |
|
{ |
|
// Expression keywords prevent 'keyword Name(...)' from being |
|
// recognized as a function definition |
|
beginKeywords: 'new throw return else', |
|
relevance: 0 |
|
}, |
|
{ |
|
className: 'class', |
|
begin: 'record\\s+' + hljs.UNDERSCORE_IDENT_RE + '\\s*\\(', |
|
returnBegin: true, |
|
excludeEnd: true, |
|
end: /[{;=]/, |
|
keywords: KEYWORDS, |
|
contains: [ |
|
{ beginKeywords: "record" }, |
|
{ |
|
begin: hljs.UNDERSCORE_IDENT_RE + '\\s*\\(', |
|
returnBegin: true, |
|
relevance: 0, |
|
contains: [hljs.UNDERSCORE_TITLE_MODE] |
|
}, |
|
{ |
|
className: 'params', |
|
begin: /\(/, end: /\)/, |
|
keywords: KEYWORDS, |
|
relevance: 0, |
|
contains: [ |
|
hljs.C_BLOCK_COMMENT_MODE |
|
] |
|
}, |
|
hljs.C_LINE_COMMENT_MODE, |
|
hljs.C_BLOCK_COMMENT_MODE |
|
] |
|
}, |
|
{ |
|
className: 'function', |
|
begin: '(' + GENERIC_IDENT_RE + '\\s+)+' + hljs.UNDERSCORE_IDENT_RE + '\\s*\\(', returnBegin: true, end: /[{;=]/, |
|
excludeEnd: true, |
|
keywords: KEYWORDS, |
|
contains: [ |
|
{ |
|
begin: hljs.UNDERSCORE_IDENT_RE + '\\s*\\(', returnBegin: true, |
|
relevance: 0, |
|
contains: [hljs.UNDERSCORE_TITLE_MODE] |
|
}, |
|
{ |
|
className: 'params', |
|
begin: /\(/, end: /\)/, |
|
keywords: KEYWORDS, |
|
relevance: 0, |
|
contains: [ |
|
ANNOTATION, |
|
hljs.APOS_STRING_MODE, |
|
hljs.QUOTE_STRING_MODE, |
|
NUMBER, |
|
hljs.C_BLOCK_COMMENT_MODE |
|
] |
|
}, |
|
hljs.C_LINE_COMMENT_MODE, |
|
hljs.C_BLOCK_COMMENT_MODE |
|
] |
|
}, |
|
NUMBER, |
|
ANNOTATION |
|
] |
|
}; |
|
} |
|
|
|
module.exports = java;
|
|
|