1
0

kotlin.js 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. /*
  2. Language: Kotlin
  3. Author: Sergey Mashkov <[email protected]>
  4. */
  5. function (hljs) {
  6. var KEYWORDS = {
  7. keyword:
  8. 'abstract as val var vararg get set class object open private protected public noinline ' +
  9. 'crossinline dynamic final enum if else do while for when throw try catch finally ' +
  10. 'import package is in fun override companion reified inline ' +
  11. 'interface annotation data sealed internal infix operator out by constructor super ' +
  12. // to be deleted soon
  13. 'trait volatile transient native default',
  14. built_in:
  15. 'Byte Short Char Int Long Boolean Float Double Void Unit Nothing',
  16. literal:
  17. 'true false null'
  18. };
  19. var KEYWORDS_WITH_LABEL = {
  20. className: 'keyword',
  21. begin: /\b(break|continue|return|this)\b/,
  22. starts: {
  23. contains: [
  24. {
  25. className: 'symbol',
  26. begin: /@\w+/
  27. }
  28. ]
  29. }
  30. };
  31. var LABEL = {
  32. className: 'symbol', begin: hljs.UNDERSCORE_IDENT_RE + '@'
  33. };
  34. // for string templates
  35. var SUBST = {
  36. className: 'subst',
  37. variants: [
  38. {begin: '\\$' + hljs.UNDERSCORE_IDENT_RE},
  39. {begin: '\\${', end: '}', contains: [hljs.APOS_STRING_MODE, hljs.C_NUMBER_MODE]}
  40. ]
  41. };
  42. var STRING = {
  43. className: 'string',
  44. variants: [
  45. {
  46. begin: '"""', end: '"""',
  47. contains: [SUBST]
  48. },
  49. // Can't use built-in modes easily, as we want to use STRING in the meta
  50. // context as 'meta-string' and there's no syntax to remove explicitly set
  51. // classNames in built-in modes.
  52. {
  53. begin: '\'', end: '\'',
  54. illegal: /\n/,
  55. contains: [hljs.BACKSLASH_ESCAPE]
  56. },
  57. {
  58. begin: '"', end: '"',
  59. illegal: /\n/,
  60. contains: [hljs.BACKSLASH_ESCAPE, SUBST]
  61. }
  62. ]
  63. };
  64. var ANNOTATION_USE_SITE = {
  65. className: 'meta', begin: '@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\s*:(?:\\s*' + hljs.UNDERSCORE_IDENT_RE + ')?'
  66. };
  67. var ANNOTATION = {
  68. className: 'meta', begin: '@' + hljs.UNDERSCORE_IDENT_RE,
  69. contains: [
  70. {
  71. begin: /\(/, end: /\)/,
  72. contains: [
  73. hljs.inherit(STRING, {className: 'meta-string'})
  74. ]
  75. }
  76. ]
  77. };
  78. return {
  79. keywords: KEYWORDS,
  80. contains : [
  81. hljs.COMMENT(
  82. '/\\*\\*',
  83. '\\*/',
  84. {
  85. relevance : 0,
  86. contains : [{
  87. className : 'doctag',
  88. begin : '@[A-Za-z]+'
  89. }]
  90. }
  91. ),
  92. hljs.C_LINE_COMMENT_MODE,
  93. hljs.C_BLOCK_COMMENT_MODE,
  94. KEYWORDS_WITH_LABEL,
  95. LABEL,
  96. ANNOTATION_USE_SITE,
  97. ANNOTATION,
  98. {
  99. className: 'function',
  100. beginKeywords: 'fun', end: '[(]|$',
  101. returnBegin: true,
  102. excludeEnd: true,
  103. keywords: KEYWORDS,
  104. illegal: /fun\s+(<.*>)?[^\s\(]+(\s+[^\s\(]+)\s*=/,
  105. relevance: 5,
  106. contains: [
  107. {
  108. begin: hljs.UNDERSCORE_IDENT_RE + '\\s*\\(', returnBegin: true,
  109. relevance: 0,
  110. contains: [hljs.UNDERSCORE_TITLE_MODE]
  111. },
  112. {
  113. className: 'type',
  114. begin: /</, end: />/, keywords: 'reified',
  115. relevance: 0
  116. },
  117. {
  118. className: 'params',
  119. begin: /\(/, end: /\)/,
  120. endsParent: true,
  121. keywords: KEYWORDS,
  122. relevance: 0,
  123. contains: [
  124. {
  125. begin: /:/, end: /[=,\/]/, endsWithParent: true,
  126. contains: [
  127. {className: 'type', begin: hljs.UNDERSCORE_IDENT_RE},
  128. hljs.C_LINE_COMMENT_MODE,
  129. hljs.C_BLOCK_COMMENT_MODE
  130. ],
  131. relevance: 0
  132. },
  133. hljs.C_LINE_COMMENT_MODE,
  134. hljs.C_BLOCK_COMMENT_MODE,
  135. ANNOTATION_USE_SITE,
  136. ANNOTATION,
  137. STRING,
  138. hljs.C_NUMBER_MODE
  139. ]
  140. },
  141. hljs.C_BLOCK_COMMENT_MODE
  142. ]
  143. },
  144. {
  145. className: 'class',
  146. beginKeywords: 'class interface trait', end: /[:\{(]|$/, // remove 'trait' when removed from KEYWORDS
  147. excludeEnd: true,
  148. illegal: 'extends implements',
  149. contains: [
  150. {beginKeywords: 'public protected internal private constructor'},
  151. hljs.UNDERSCORE_TITLE_MODE,
  152. {
  153. className: 'type',
  154. begin: /</, end: />/, excludeBegin: true, excludeEnd: true,
  155. relevance: 0
  156. },
  157. {
  158. className: 'type',
  159. begin: /[,:]\s*/, end: /[<\(,]|$/, excludeBegin: true, returnEnd: true
  160. },
  161. ANNOTATION_USE_SITE,
  162. ANNOTATION
  163. ]
  164. },
  165. STRING,
  166. {
  167. className: 'meta',
  168. begin: "^#!/usr/bin/env", end: '$',
  169. illegal: '\n'
  170. },
  171. hljs.C_NUMBER_MODE
  172. ]
  173. };
  174. }