182 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			182 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| // 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;
 |