]>
luflow.net public git repositories - flow-web.git/blob - static/highlight/es/languages/elixir.js
1 /*! `elixir` grammar compiled for Highlight.js 11.11.1 */
2 var hljsGrammar
= (function () {
7 Author: Josh Adams <josh@isotope11.com>
8 Description: language definition for Elixir source code files (.ex and .exs). Based on ruby language support.
10 Website: https://elixir-lang.org
13 /** @type LanguageFn */
14 function elixir(hljs
) {
15 const regex
= hljs
.regex
;
16 const ELIXIR_IDENT_RE
= '[a-zA-Z_][a-zA-Z0-9_.]*(!|\\?)?';
17 const ELIXIR_METHOD_RE
= '[a-zA-Z_]\\w*[!?=]?|[-+~]@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?';
57 $pattern: ELIXIR_IDENT_RE
,
69 begin: '(\\b0o[0-7_]+)|(\\b0b[01_]+)|(\\b0x[0-9a-fA-F_]+)|(-?\\b[0-9][0-9_]*(\\.[0-9_]+([eE][-+]?[0-9]+)?)?)',
72 // TODO: could be tightened
73 // https://elixir-lang.readthedocs.io/en/latest/intro/18.html
74 // but you also need to include closing delemeters in the escape list per
75 // individual sigil mode from what I can tell,
76 // ie: \} might or might not be an escape depending on the sigil used
77 const ESCAPES_RE
= /\\[\s\S]/;
78 // const ESCAPES_RE = /\\["'\\abdefnrstv0]/;
79 const BACKSLASH_ESCAPE
= {
84 const SIGIL_DELIMITERS
= '[/|([{<"\']';
85 const SIGIL_DELIMITER_MODES
= [
119 const escapeSigilEnd
= (end
) => {
121 scope: "char.escape",
122 begin: regex
.concat(/\\/, end
),
126 const LOWERCASE_SIGIL
= {
128 begin: '~[a-z]' + '(?=' + SIGIL_DELIMITERS
+ ')',
129 contains: SIGIL_DELIMITER_MODES
.map(x
=> hljs
.inherit(x
,
131 escapeSigilEnd(x
.end
),
138 const UPCASE_SIGIL
= {
140 begin: '~[A-Z]' + '(?=' + SIGIL_DELIMITERS
+ ')',
141 contains: SIGIL_DELIMITER_MODES
.map(x
=> hljs
.inherit(x
,
142 { contains: [ escapeSigilEnd(x
.end
) ] }
146 const REGEX_SIGIL
= {
150 begin: '~r' + '(?=' + SIGIL_DELIMITERS
+ ')',
151 contains: SIGIL_DELIMITER_MODES
.map(x
=> hljs
.inherit(x
,
153 end: regex
.concat(x
.end
, /[uismxfU]{0,7}/),
155 escapeSigilEnd(x
.end
),
163 begin: '~R' + '(?=' + SIGIL_DELIMITERS
+ ')',
164 contains: SIGIL_DELIMITER_MODES
.map(x
=> hljs
.inherit(x
,
166 end: regex
.concat(x
.end
, /[uismxfU]{0,7}/),
167 contains: [ escapeSigilEnd(x
.end
) ]
177 hljs
.BACKSLASH_ESCAPE
,
192 contains: [] // override default
197 contains: [] // override default
202 contains: [] // override default
207 contains: [] // override default
220 className: 'function',
221 beginKeywords: 'def defp defmacro defmacrop',
222 end: /\B\b/, // the mode is ended by the title
224 hljs.inherit(hljs.TITLE_MODE, {
225 begin: ELIXIR_IDENT_RE,
230 const CLASS = hljs.inherit(FUNCTION, {
232 beginKeywords: 'defimpl defmodule defprotocol defrecord',
235 const ELIXIR_DEFAULT_CONTAINS = [
240 hljs.HASH_COMMENT_MODE,
246 begin: ':(?![\\s:])',
249 { begin: ELIXIR_METHOD_RE }
255 begin: ELIXIR_IDENT_RE + ':(?!:)',
258 { // Usage of a module, struct, etc.
259 className: 'title.class',
260 begin: /(\b[A-Z][a-zA-Z0-9_]+)/,
265 className: 'variable',
266 begin: '(\\$\\W)|((\\$|@@?)(\\w+))'
268 // -> has been removed, capnproto always uses this grammar construct
270 SUBST.contains = ELIXIR_DEFAULT_CONTAINS;
279 contains: ELIXIR_DEFAULT_CONTAINS
287 export default hljsGrammar;