/project/WebDashboard/javascript/highlight/languages/erlang.js

https://github.com/skolima/CruiseControl.NET · JavaScript · 201 lines · 188 code · 5 blank · 8 comment · 0 complexity · 649ffdfbfbdf2eb13cf2414d41683667 MD5 · raw file

  1. /*
  2. Language: Erlang
  3. Description: Erlang is a general-purpose functional language, with strict evaluation, single assignment, and dynamic typing.
  4. Author: Nikolay Zakharov <nikolay.desh@gmail.com>, Dmitry Kovega <arhibot@gmail.com>
  5. */
  6. hljs.LANGUAGES.erlang = function(){
  7. var BASIC_ATOM_RE = '[a-z\'][a-zA-Z0-9_\']*';
  8. var FUNCTION_NAME_RE = '(' + BASIC_ATOM_RE + ':' + BASIC_ATOM_RE + '|' + BASIC_ATOM_RE + ')';
  9. var ERLANG_RESERVED = {
  10. 'keyword': {
  11. 'after': 1,
  12. 'and': 1,
  13. 'andalso': 10,
  14. 'band': 1,
  15. 'begin': 1,
  16. 'bnot': 1,
  17. 'bor': 1,
  18. 'bsl': 1,
  19. 'bzr': 1,
  20. 'bxor': 1,
  21. 'case': 1,
  22. 'catch': 1,
  23. 'cond': 1,
  24. 'div': 1,
  25. 'end': 1,
  26. 'fun': 1,
  27. 'let': 1,
  28. 'not': 1,
  29. 'of': 1,
  30. 'orelse': 10,
  31. 'query': 1,
  32. 'receive': 1,
  33. 'rem': 1,
  34. 'try': 1,
  35. 'when': 1,
  36. 'xor': 1
  37. },
  38. 'literal': {'false': 1, 'true': 1}
  39. };
  40. var COMMENT = {
  41. className: 'comment',
  42. begin: '%', end: '$',
  43. relevance: 0
  44. };
  45. var NAMED_FUN = {
  46. begin: 'fun\\s+' + BASIC_ATOM_RE + '/\\d+'
  47. };
  48. var FUNCTION_CALL = {
  49. begin: FUNCTION_NAME_RE + '\\(', end: '\\)',
  50. returnBegin: true,
  51. relevance: 0,
  52. contains: [
  53. {
  54. className: 'function_name', begin: FUNCTION_NAME_RE,
  55. relevance: 0
  56. },
  57. {
  58. begin: '\\(', end: '\\)', endsWithParent: true,
  59. returnEnd: true,
  60. relevance: 0
  61. // "contains" defined later
  62. }
  63. ]
  64. };
  65. var TUPLE = {
  66. className: 'tuple',
  67. begin: '{', end: '}',
  68. relevance: 0
  69. // "contains" defined later
  70. };
  71. var VAR1 = {
  72. className: 'variable',
  73. begin: '\\b_([A-Z][A-Za-z0-9_]*)?',
  74. relevance: 0
  75. };
  76. var VAR2 = {
  77. className: 'variable',
  78. begin: '[A-Z][a-zA-Z0-9_]*',
  79. relevance: 0
  80. };
  81. var RECORD_ACCESS = {
  82. begin: '#', end: '}',
  83. illegal: '.',
  84. relevance: 0,
  85. returnBegin: true,
  86. contains: [
  87. {
  88. className: 'record_name',
  89. begin: '#' + hljs.UNDERSCORE_IDENT_RE,
  90. relevance: 0
  91. },
  92. {
  93. begin: '{', endsWithParent: true,
  94. relevance: 0
  95. // "contains" defined later
  96. }
  97. ]
  98. };
  99. var BLOCK_STATEMENTS = {
  100. keywords: ERLANG_RESERVED,
  101. begin: '(fun|receive|if|try|case)', end: 'end'
  102. };
  103. BLOCK_STATEMENTS.contains = [
  104. COMMENT,
  105. NAMED_FUN,
  106. hljs.inherit(hljs.APOS_STRING_MODE, {className: ''}),
  107. BLOCK_STATEMENTS,
  108. FUNCTION_CALL,
  109. hljs.QUOTE_STRING_MODE,
  110. hljs.C_NUMBER_MODE,
  111. TUPLE,
  112. VAR1, VAR2,
  113. RECORD_ACCESS
  114. ];
  115. var BASIC_MODES = [
  116. COMMENT,
  117. NAMED_FUN,
  118. BLOCK_STATEMENTS,
  119. FUNCTION_CALL,
  120. hljs.QUOTE_STRING_MODE,
  121. hljs.C_NUMBER_MODE,
  122. TUPLE,
  123. VAR1, VAR2,
  124. RECORD_ACCESS
  125. ];
  126. FUNCTION_CALL.contains[1].contains = BASIC_MODES;
  127. TUPLE.contains = BASIC_MODES;
  128. RECORD_ACCESS.contains[1].contains = BASIC_MODES;
  129. var PARAMS = {
  130. className: 'params',
  131. begin: '\\(', end: '\\)',
  132. endsWithParent: true,
  133. contains: BASIC_MODES
  134. };
  135. return {
  136. defaultMode: {
  137. keywords: ERLANG_RESERVED,
  138. illegal: '(</|\\*=|\\+=|-=|/=|/\\*|\\*/|\\(\\*|\\*\\))',
  139. contains: [
  140. {
  141. className: 'function',
  142. begin: '^' + BASIC_ATOM_RE + '\\(', end: ';|\\.',
  143. returnBegin: true,
  144. contains: [
  145. PARAMS,
  146. {
  147. className: 'title', begin: BASIC_ATOM_RE
  148. },
  149. {
  150. keywords: ERLANG_RESERVED,
  151. begin: '->', endsWithParent: true,
  152. contains: BASIC_MODES
  153. }
  154. ]
  155. },
  156. COMMENT,
  157. {
  158. className: 'pp',
  159. begin: '^-', end: '\\.',
  160. relevance: 0,
  161. excludeEnd: true,
  162. returnBegin: true,
  163. lexems: '-' + hljs.IDENT_RE,
  164. keywords: {
  165. '-module':1,
  166. '-record':1,
  167. '-undef':1,
  168. '-export':1,
  169. '-ifdef':1,
  170. '-ifndef':1,
  171. '-author':1,
  172. '-copyright':1,
  173. '-doc':1,
  174. '-vsn':1,
  175. '-import': 1,
  176. '-include': 1,
  177. '-include_lib': 1,
  178. '-compile': 1,
  179. '-define': 1,
  180. '-else': 1,
  181. '-endif': 1,
  182. '-file': 1,
  183. '-behaviour': 1,
  184. '-behavior': 1
  185. },
  186. contains: [PARAMS]
  187. },
  188. hljs.C_NUMBER_MODE,
  189. hljs.QUOTE_STRING_MODE,
  190. RECORD_ACCESS,
  191. VAR1, VAR2,
  192. TUPLE
  193. ]
  194. }
  195. };
  196. }();