java.js 3.7 KB

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