| Index: lib/src/prism/components/prism-elixir.js
|
| diff --git a/lib/src/prism/components/prism-elixir.js b/lib/src/prism/components/prism-elixir.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..42ae187e1172277b4e2706b8db90b09d2c3a0e87
|
| --- /dev/null
|
| +++ b/lib/src/prism/components/prism-elixir.js
|
| @@ -0,0 +1,90 @@
|
| +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)
|
| + }
|
| + }
|
| + };
|
| +});
|
| +
|
|
|