Blame view

bower_components/prism/components/prism-elixir.js 2.54 KB
eb240478   Luigi Serra   public room cards...
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
  Prism.languages.elixir = {
  	// Negative look-ahead is needed for string interpolation
  	// Negative look-behind is needed to avoid highlighting markdown headers in
  	// multi-line doc strings
  	'comment': {
  		pattern: /(^|[^#])#(?![{#]).*/m,
  		lookbehind: true
  	},
  	// ~r"""foo""", ~r'''foo''', ~r/foo/, ~r|foo|, ~r"foo", ~r'foo', ~r(foo), ~r[foo], ~r{foo}, ~r<foo>
  	'regex': /~[rR](?:("""|'''|[\/|"'])(?:\\.|(?!\1)[^\\])+\1|\((?:\\\)|[^)])+\)|\[(?:\\\]|[^\]])+\]|\{(?:\\\}|[^}])+\}|<(?:\\>|[^>])+>)[uismxfr]*/,
  	'string': [
  		{
  			// ~s"""foo""", ~s'''foo''', ~s/foo/, ~s|foo|, ~s"foo", ~s'foo', ~s(foo), ~s[foo], ~s{foo}, ~s<foo>
  			pattern: /~[cCsSwW](?:("""|'''|[\/|"'])(?:\\.|(?!\1)[^\\])+\1|\((?:\\\)|[^)])+\)|\[(?:\\\]|[^\]])+\]|\{(?:\\\}|#\{[^}]+\}|[^}])+\}|<(?:\\>|[^>])+>)[csa]?/,
  			inside: {
  				// See interpolation below
  			}
  		},
  		{
  			pattern: /("""|''')[\s\S]*?\1/,
  			inside: {
  				// See interpolation below
  			}
  		},
  		{
  			// Multi-line strings are allowed
  			pattern: /("|')(?:\\[\s\S]|(?!\1)[^\\])*\1/,
  			inside: {
  				// See interpolation below
  			}
  		}
  	],
  	'atom': {
  		// Look-behind prevents bad highlighting of the :: operator
  		pattern: /(^|[^:]):\w+/,
  		lookbehind: true,
  		alias: 'symbol'
  	},
  	// Look-ahead prevents bad highlighting of the :: operator
  	'attr-name': /\w+:(?!:)/,
  	'capture': {
  		// Look-behind prevents bad highlighting of the && operator
  		pattern: /(^|[^&])&(?:[^&\s\d()][^\s()]*|(?=\())/,
  		lookbehind: true,
  		alias: 'function'
  	},
  	'argument': {
  		// Look-behind prevents bad highlighting of the && operator
  		pattern: /(^|[^&])&\d+/,
  		lookbehind: true,
  		alias: 'variable'
  	},
  	'attribute': {
  		pattern: /@[\S]+/,
  		alias: 'variable'
  	},
  	'number': /\b(?:0[box][a-f\d_]+|\d[\d_]*)(?:\.[\d_]+)?(?:e[+-]?[\d_]+)?\b/i,
  	'keyword': /\b(?:after|alias|and|case|catch|cond|def(?:callback|exception|impl|module|p|protocol|struct)?|do|else|end|fn|for|if|import|not|or|require|rescue|try|unless|use|when)\b/,
  	'boolean': /\b(?:true|false|nil)\b/,
  	'operator': [
  		/\bin\b|&&?|\|[|>]?|\\\\|::|\.\.\.?|\+\+?|-[->]?|<[-=>]|>=|!==?|\B!|=(?:==?|[>~])?|[*\/^]/,
  		{
  			// We don't want to match <<
  			pattern: /([^<])<(?!<)/,
  			lookbehind: true
  		},
  		{
  			// We don't want to match >>
  			pattern: /([^>])>(?!>)/,
  			lookbehind: true
  		}
  	],
  	'punctuation': /<<|>>|[.,%\[\]{}()]/
  };
  
  Prism.languages.elixir.string.forEach(function(o) {
  	o.inside = {
  		'interpolation': {
  			pattern: /#\{[^}]+\}/,
  			inside: {
  				'delimiter': {
  					pattern: /^#\{|\}$/,
  					alias: 'punctuation'
  				},
  				rest: Prism.util.clone(Prism.languages.elixir)
  			}
  		}
  	};
  });