| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 | module.exports = function(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';  // https://docs.oracle.com/javase/7/docs/technotes/guides/language/underscores-literals.html  var JAVA_NUMBER_RE = '\\b' +    '(' +      '0[bB]([01]+[01_]+[01]+|[01]+)' + // 0b...      '|' +      '0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)' + // 0x...      '|' +      '(' +        '([\\d]+[\\d_]+[\\d]+|[\\d]+)(\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))?' +        '|' +        '\\.([\\d]+[\\d_]+[\\d]+|[\\d]+)' +      ')' +      '([eE][-+]?\\d+)?' + // octal, decimal, float    ')' +    '[lLfF]?';  var JAVA_NUMBER_MODE = {    className: 'number',    begin: JAVA_NUMBER_RE,    relevance: 0  };  return {    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]+'            }          ]        }      ),      hljs.C_LINE_COMMENT_MODE,      hljs.C_BLOCK_COMMENT_MODE,      hljs.APOS_STRING_MODE,      hljs.QUOTE_STRING_MODE,      {        className: 'class',        beginKeywords: 'class interface', end: /[{;=]/, excludeEnd: true,        keywords: 'class interface',        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: '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: [              hljs.APOS_STRING_MODE,              hljs.QUOTE_STRING_MODE,              hljs.C_NUMBER_MODE,              hljs.C_BLOCK_COMMENT_MODE            ]          },          hljs.C_LINE_COMMENT_MODE,          hljs.C_BLOCK_COMMENT_MODE        ]      },      JAVA_NUMBER_MODE,      {        className: 'meta', begin: '@[A-Za-z]+'      }    ]  };};
 |