1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
| module.exports = function(hljs) {
| var ELIXIR_IDENT_RE = '[a-zA-Z_][a-zA-Z0-9_.]*(\\!|\\?)?';
| var ELIXIR_METHOD_RE = '[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?';
| var ELIXIR_KEYWORDS =
| 'and false then defined module in return redo retry end for true self when ' +
| 'next until do begin unless nil break not case cond alias while ensure or ' +
| 'include use alias fn quote require import with|0';
| var SUBST = {
| className: 'subst',
| begin: '#\\{', end: '}',
| lexemes: ELIXIR_IDENT_RE,
| keywords: ELIXIR_KEYWORDS
| };
| var STRING = {
| className: 'string',
| contains: [hljs.BACKSLASH_ESCAPE, SUBST],
| variants: [
| {
| begin: /'/, end: /'/
| },
| {
| begin: /"/, end: /"/
| }
| ]
| };
| var FUNCTION = {
| className: 'function',
| beginKeywords: 'def defp defmacro', end: /\B\b/, // the mode is ended by the title
| contains: [
| hljs.inherit(hljs.TITLE_MODE, {
| begin: ELIXIR_IDENT_RE,
| endsParent: true
| })
| ]
| };
| var CLASS = hljs.inherit(FUNCTION, {
| className: 'class',
| beginKeywords: 'defimpl defmodule defprotocol defrecord', end: /\bdo\b|$|;/
| });
| var ELIXIR_DEFAULT_CONTAINS = [
| STRING,
| hljs.HASH_COMMENT_MODE,
| CLASS,
| FUNCTION,
| {
| begin: '::'
| },
| {
| className: 'symbol',
| begin: ':(?![\\s:])',
| contains: [STRING, {begin: ELIXIR_METHOD_RE}],
| relevance: 0
| },
| {
| className: 'symbol',
| begin: ELIXIR_IDENT_RE + ':(?!:)',
| relevance: 0
| },
| {
| className: 'number',
| begin: '(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b',
| relevance: 0
| },
| {
| className: 'variable',
| begin: '(\\$\\W)|((\\$|\\@\\@?)(\\w+))'
| },
| {
| begin: '->'
| },
| { // regexp container
| begin: '(' + hljs.RE_STARTERS_RE + ')\\s*',
| contains: [
| hljs.HASH_COMMENT_MODE,
| {
| className: 'regexp',
| illegal: '\\n',
| contains: [hljs.BACKSLASH_ESCAPE, SUBST],
| variants: [
| {
| begin: '/', end: '/[a-z]*'
| },
| {
| begin: '%r\\[', end: '\\][a-z]*'
| }
| ]
| }
| ],
| relevance: 0
| }
| ];
| SUBST.contains = ELIXIR_DEFAULT_CONTAINS;
|
| return {
| lexemes: ELIXIR_IDENT_RE,
| keywords: ELIXIR_KEYWORDS,
| contains: ELIXIR_DEFAULT_CONTAINS
| };
| };
|
|