java.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. /*
  2. Language: Java
  3. Author: Vsevolod Solovyov <[email protected]>
  4. Category: common, enterprise
  5. */
  6. function(hljs) {
  7. var JAVA_IDENT_RE = '[\u00C0-\u02B8a-zA-Z_$][\u00C0-\u02B8a-zA-Z_$0-9]*';
  8. var GENERIC_IDENT_RE = JAVA_IDENT_RE + '(<' + JAVA_IDENT_RE + '(\\s*,\\s*' + JAVA_IDENT_RE + ')*>)?';
  9. var KEYWORDS =
  10. 'false synchronized int abstract float private char boolean static null if const ' +
  11. 'for true while long strictfp finally protected import native final void ' +
  12. 'enum else break transient catch instanceof byte super volatile case assert short ' +
  13. 'package default double public try this switch continue throws protected public private ' +
  14. 'module requires exports do';
  15. // https://docs.oracle.com/javase/7/docs/technotes/guides/language/underscores-literals.html
  16. var JAVA_NUMBER_RE = '\\b' +
  17. '(' +
  18. '0[bB]([01]+[01_]+[01]+|[01]+)' + // 0b...
  19. '|' +
  20. '0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)' + // 0x...
  21. '|' +
  22. '(' +
  23. '([\\d]+[\\d_]+[\\d]+|[\\d]+)(\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))?' +
  24. '|' +
  25. '\\.([\\d]+[\\d_]+[\\d]+|[\\d]+)' +
  26. ')' +
  27. '([eE][-+]?\\d+)?' + // octal, decimal, float
  28. ')' +
  29. '[lLfF]?';
  30. var JAVA_NUMBER_MODE = {
  31. className: 'number',
  32. begin: JAVA_NUMBER_RE,
  33. relevance: 0
  34. };
  35. return {
  36. aliases: ['jsp'],
  37. keywords: KEYWORDS,
  38. illegal: /<\/|#/,
  39. contains: [
  40. hljs.COMMENT(
  41. '/\\*\\*',
  42. '\\*/',
  43. {
  44. relevance : 0,
  45. contains : [
  46. {
  47. // eat up @'s in emails to prevent them to be recognized as doctags
  48. begin: /\w+@/, relevance: 0
  49. },
  50. {
  51. className : 'doctag',
  52. begin : '@[A-Za-z]+'
  53. }
  54. ]
  55. }
  56. ),
  57. hljs.C_LINE_COMMENT_MODE,
  58. hljs.C_BLOCK_COMMENT_MODE,
  59. hljs.APOS_STRING_MODE,
  60. hljs.QUOTE_STRING_MODE,
  61. {
  62. className: 'class',
  63. beginKeywords: 'class interface', end: /[{;=]/, excludeEnd: true,
  64. keywords: 'class interface',
  65. illegal: /[:"\[\]]/,
  66. contains: [
  67. {beginKeywords: 'extends implements'},
  68. hljs.UNDERSCORE_TITLE_MODE
  69. ]
  70. },
  71. {
  72. // Expression keywords prevent 'keyword Name(...)' from being
  73. // recognized as a function definition
  74. beginKeywords: 'new throw return else',
  75. relevance: 0
  76. },
  77. {
  78. className: 'function',
  79. begin: '(' + GENERIC_IDENT_RE + '\\s+)+' + hljs.UNDERSCORE_IDENT_RE + '\\s*\\(', returnBegin: true, end: /[{;=]/,
  80. excludeEnd: true,
  81. keywords: KEYWORDS,
  82. contains: [
  83. {
  84. begin: hljs.UNDERSCORE_IDENT_RE + '\\s*\\(', returnBegin: true,
  85. relevance: 0,
  86. contains: [hljs.UNDERSCORE_TITLE_MODE]
  87. },
  88. {
  89. className: 'params',
  90. begin: /\(/, end: /\)/,
  91. keywords: KEYWORDS,
  92. relevance: 0,
  93. contains: [
  94. hljs.APOS_STRING_MODE,
  95. hljs.QUOTE_STRING_MODE,
  96. hljs.C_NUMBER_MODE,
  97. hljs.C_BLOCK_COMMENT_MODE
  98. ]
  99. },
  100. hljs.C_LINE_COMMENT_MODE,
  101. hljs.C_BLOCK_COMMENT_MODE
  102. ]
  103. },
  104. JAVA_NUMBER_MODE,
  105. {
  106. className: 'meta', begin: '@[A-Za-z]+'
  107. }
  108. ]
  109. };
  110. }