/Python27/Lib/site-packages/IPython/html/static/components/highlight.js/src/languages/ruby.js

https://github.com/mantidproject/3rdpartylibs-win32 · JavaScript · 195 lines · 187 code · 3 blank · 5 comment · 4 complexity · f0cb2bd1c556ad48f327146ee8115f30 MD5 · raw file

  1. /*
  2. Language: Ruby
  3. Author: Anton Kovalyov <anton@kovalyov.net>
  4. Contributors: Peter Leonov <gojpeg@yandex.ru>, Vasily Polovnyov <vast@whiteants.net>, Loren Segal <lsegal@soen.ca>
  5. */
  6. function(hljs) {
  7. var RUBY_IDENT_RE = '[a-zA-Z_][a-zA-Z0-9_]*(\\!|\\?)?';
  8. var RUBY_METHOD_RE = '[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?';
  9. var RUBY_KEYWORDS = {
  10. keyword:
  11. 'and false then defined module in return redo if BEGIN retry end for true self when ' +
  12. 'next until do begin unless END rescue nil else break undef not super class case ' +
  13. 'require yield alias while ensure elsif or include'
  14. };
  15. var YARDOCTAG = {
  16. className: 'yardoctag',
  17. begin: '@[A-Za-z]+'
  18. };
  19. var COMMENTS = [
  20. {
  21. className: 'comment',
  22. begin: '#', end: '$',
  23. contains: [YARDOCTAG]
  24. },
  25. {
  26. className: 'comment',
  27. begin: '^\\=begin', end: '^\\=end',
  28. contains: [YARDOCTAG],
  29. relevance: 10
  30. },
  31. {
  32. className: 'comment',
  33. begin: '^__END__', end: '\\n$'
  34. }
  35. ];
  36. var SUBST = {
  37. className: 'subst',
  38. begin: '#\\{', end: '}',
  39. lexems: RUBY_IDENT_RE,
  40. keywords: RUBY_KEYWORDS
  41. };
  42. var STR_CONTAINS = [hljs.BACKSLASH_ESCAPE, SUBST];
  43. var STRINGS = [
  44. {
  45. className: 'string',
  46. begin: '\'', end: '\'',
  47. contains: STR_CONTAINS,
  48. relevance: 0
  49. },
  50. {
  51. className: 'string',
  52. begin: '"', end: '"',
  53. contains: STR_CONTAINS,
  54. relevance: 0
  55. },
  56. {
  57. className: 'string',
  58. begin: '%[qw]?\\(', end: '\\)',
  59. contains: STR_CONTAINS
  60. },
  61. {
  62. className: 'string',
  63. begin: '%[qw]?\\[', end: '\\]',
  64. contains: STR_CONTAINS
  65. },
  66. {
  67. className: 'string',
  68. begin: '%[qw]?{', end: '}',
  69. contains: STR_CONTAINS
  70. },
  71. {
  72. className: 'string',
  73. begin: '%[qw]?<', end: '>',
  74. contains: STR_CONTAINS,
  75. relevance: 10
  76. },
  77. {
  78. className: 'string',
  79. begin: '%[qw]?/', end: '/',
  80. contains: STR_CONTAINS,
  81. relevance: 10
  82. },
  83. {
  84. className: 'string',
  85. begin: '%[qw]?%', end: '%',
  86. contains: STR_CONTAINS,
  87. relevance: 10
  88. },
  89. {
  90. className: 'string',
  91. begin: '%[qw]?-', end: '-',
  92. contains: STR_CONTAINS,
  93. relevance: 10
  94. },
  95. {
  96. className: 'string',
  97. begin: '%[qw]?\\|', end: '\\|',
  98. contains: STR_CONTAINS,
  99. relevance: 10
  100. }
  101. ];
  102. var FUNCTION = {
  103. className: 'function',
  104. beginWithKeyword: true, end: ' |$|;',
  105. keywords: 'def',
  106. contains: [
  107. {
  108. className: 'title',
  109. begin: RUBY_METHOD_RE,
  110. lexems: RUBY_IDENT_RE,
  111. keywords: RUBY_KEYWORDS
  112. },
  113. {
  114. className: 'params',
  115. begin: '\\(', end: '\\)',
  116. lexems: RUBY_IDENT_RE,
  117. keywords: RUBY_KEYWORDS
  118. }
  119. ].concat(COMMENTS)
  120. };
  121. var RUBY_DEFAULT_CONTAINS = COMMENTS.concat(STRINGS.concat([
  122. {
  123. className: 'class',
  124. beginWithKeyword: true, end: '$|;',
  125. keywords: 'class module',
  126. contains: [
  127. {
  128. className: 'title',
  129. begin: '[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?',
  130. relevance: 0
  131. },
  132. {
  133. className: 'inheritance',
  134. begin: '<\\s*',
  135. contains: [{
  136. className: 'parent',
  137. begin: '(' + hljs.IDENT_RE + '::)?' + hljs.IDENT_RE
  138. }]
  139. }
  140. ].concat(COMMENTS)
  141. },
  142. FUNCTION,
  143. {
  144. className: 'constant',
  145. begin: '(::)?(\\b[A-Z]\\w*(::)?)+',
  146. relevance: 0
  147. },
  148. {
  149. className: 'symbol',
  150. begin: ':',
  151. contains: STRINGS.concat([{begin: RUBY_METHOD_RE}]),
  152. relevance: 0
  153. },
  154. {
  155. className: 'symbol',
  156. begin: RUBY_IDENT_RE + ':',
  157. relevance: 0
  158. },
  159. {
  160. className: 'number',
  161. begin: '(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b',
  162. relevance: 0
  163. },
  164. {
  165. className: 'number',
  166. begin: '\\?\\w'
  167. },
  168. {
  169. className: 'variable',
  170. begin: '(\\$\\W)|((\\$|\\@\\@?)(\\w+))'
  171. },
  172. { // regexp container
  173. begin: '(' + hljs.RE_STARTERS_RE + ')\\s*',
  174. contains: COMMENTS.concat([
  175. {
  176. className: 'regexp',
  177. begin: '/', end: '/[a-z]*',
  178. illegal: '\\n',
  179. contains: [hljs.BACKSLASH_ESCAPE, SUBST]
  180. }
  181. ]),
  182. relevance: 0
  183. }
  184. ]));
  185. SUBST.contains = RUBY_DEFAULT_CONTAINS;
  186. FUNCTION.contains[1].contains = RUBY_DEFAULT_CONTAINS;
  187. return {
  188. lexems: RUBY_IDENT_RE,
  189. keywords: RUBY_KEYWORDS,
  190. contains: RUBY_DEFAULT_CONTAINS
  191. };
  192. }