java.js 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  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 = '[\xC0-\u02B8a-zA-Z_$][\xC0-\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 for true while long strictfp finally protected import native final void enum else break transient catch instanceof byte super volatile case assert short ' +
  12. 'package default double public try this switch continue throws protected public private ' +
  13. 'module requires exports do';
  14. var ANNOTATION = {
  15. className: 'meta',
  16. begin: '@' + JAVA_IDENT_RE,
  17. contains: [
  18. {
  19. begin: /\(/,
  20. end: /\)/,
  21. contains: ['self'] // allow nested () inside our annotation
  22. }
  23. ]
  24. };
  25. // https://docs.oracle.com/javase/7/docs/technotes/guides/language/underscores-literals.html
  26. var JAVA_NUMBER_RE =
  27. '\\b(0[bB]([01]+[01_]+[01]+|[01]+)' +
  28. // 0b...
  29. '|' +
  30. '0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)' +
  31. // 0x...
  32. '|' +
  33. '(' +
  34. '([\\d]+[\\d_]+[\\d]+|[\\d]+)(\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))?' +
  35. '|' +
  36. '\\.([\\d]+[\\d_]+[\\d]+|[\\d]+)' +
  37. ')' +
  38. '([eE][-+]?\\d+)?' +
  39. // 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. relevance: 0,
  55. contains: [
  56. {
  57. // eat up @'s in emails to prevent them to be recognized as doctags
  58. begin: /\w+@/,
  59. relevance: 0
  60. },
  61. {
  62. className: 'doctag',
  63. begin: '@[A-Za-z]+'
  64. }
  65. ]
  66. }),
  67. hljs.C_LINE_COMMENT_MODE,
  68. hljs.C_BLOCK_COMMENT_MODE,
  69. hljs.APOS_STRING_MODE,
  70. hljs.QUOTE_STRING_MODE,
  71. {
  72. className: 'class',
  73. beginKeywords: 'class interface',
  74. end: /[{;=]/,
  75. excludeEnd: true,
  76. keywords: 'class interface',
  77. illegal: /[:"\[\]]/,
  78. contains: [
  79. {
  80. beginKeywords: 'extends implements'
  81. },
  82. hljs.UNDERSCORE_TITLE_MODE
  83. ]
  84. },
  85. {
  86. // Expression keywords prevent 'keyword Name(...)' from being
  87. // recognized as a function definition
  88. beginKeywords: 'new throw return else',
  89. relevance: 0
  90. },
  91. {
  92. className: 'function',
  93. begin: '(' + GENERIC_IDENT_RE + '\\s+)+' + hljs.UNDERSCORE_IDENT_RE + '\\s*\\(',
  94. returnBegin: true,
  95. end: /[{;=]/,
  96. excludeEnd: true,
  97. keywords: KEYWORDS,
  98. contains: [
  99. {
  100. begin: hljs.UNDERSCORE_IDENT_RE + '\\s*\\(',
  101. returnBegin: true,
  102. relevance: 0,
  103. contains: [hljs.UNDERSCORE_TITLE_MODE]
  104. },
  105. {
  106. className: 'params',
  107. begin: /\(/,
  108. end: /\)/,
  109. keywords: KEYWORDS,
  110. relevance: 0,
  111. contains: [ANNOTATION, hljs.APOS_STRING_MODE, hljs.QUOTE_STRING_MODE, hljs.C_NUMBER_MODE, hljs.C_BLOCK_COMMENT_MODE]
  112. },
  113. hljs.C_LINE_COMMENT_MODE,
  114. hljs.C_BLOCK_COMMENT_MODE
  115. ]
  116. },
  117. JAVA_NUMBER_MODE,
  118. ANNOTATION
  119. ]
  120. };
  121. }