groovy.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. /*
  2. Language: Groovy
  3. Author: Guillaume Laforge <[email protected]>
  4. Website: http://glaforge.appspot.com
  5. Description: Groovy programming language implementation inspired from Vsevolod's Java mode
  6. */
  7. function(hljs) {
  8. return {
  9. keywords: {
  10. literal : 'true false null',
  11. keyword:
  12. 'byte short char int long boolean float double void ' +
  13. // groovy specific keywords
  14. 'def as in assert trait ' +
  15. // common keywords with Java
  16. 'super this abstract static volatile transient public private protected synchronized final ' +
  17. 'class interface enum if else for while switch case break default continue ' +
  18. 'throw throws try catch finally implements extends new import package return instanceof'
  19. },
  20. contains: [
  21. hljs.COMMENT(
  22. '/\\*\\*',
  23. '\\*/',
  24. {
  25. relevance : 0,
  26. contains : [
  27. {
  28. // eat up @'s in emails to prevent them to be recognized as doctags
  29. begin: /\w+@/, relevance: 0
  30. },
  31. {
  32. className : 'doctag',
  33. begin : '@[A-Za-z]+'
  34. }
  35. ]
  36. }
  37. ),
  38. hljs.C_LINE_COMMENT_MODE,
  39. hljs.C_BLOCK_COMMENT_MODE,
  40. {
  41. className: 'string',
  42. begin: '"""', end: '"""'
  43. },
  44. {
  45. className: 'string',
  46. begin: "'''", end: "'''"
  47. },
  48. {
  49. className: 'string',
  50. begin: "\\$/", end: "/\\$",
  51. relevance: 10
  52. },
  53. hljs.APOS_STRING_MODE,
  54. {
  55. className: 'regexp',
  56. begin: /~?\/[^\/\n]+\//,
  57. contains: [
  58. hljs.BACKSLASH_ESCAPE
  59. ]
  60. },
  61. hljs.QUOTE_STRING_MODE,
  62. {
  63. className: 'meta',
  64. begin: "^#!/usr/bin/env", end: '$',
  65. illegal: '\n'
  66. },
  67. hljs.BINARY_NUMBER_MODE,
  68. {
  69. className: 'class',
  70. beginKeywords: 'class interface trait enum', end: '{',
  71. illegal: ':',
  72. contains: [
  73. {beginKeywords: 'extends implements'},
  74. hljs.UNDERSCORE_TITLE_MODE
  75. ]
  76. },
  77. hljs.C_NUMBER_MODE,
  78. {
  79. className: 'meta', begin: '@[A-Za-z]+'
  80. },
  81. {
  82. // highlight map keys and named parameters as strings
  83. className: 'string', begin: /[^\?]{0}[A-Za-z0-9_$]+ *:/
  84. },
  85. {
  86. // catch middle element of the ternary operator
  87. // to avoid highlight it as a label, named parameter, or map key
  88. begin: /\?/, end: /\:/
  89. },
  90. {
  91. // highlight labeled statements
  92. className: 'symbol', begin: '^\\s*[A-Za-z0-9_$]+:',
  93. relevance: 0
  94. }
  95. ],
  96. illegal: /#|<\//
  97. }
  98. }