{"version":3,"file":"elixir.mjs","sources":["../../../../../../node_modules/highlight.js/lib/languages/elixir.js"],"sourcesContent":["/*\nLanguage: Elixir\nAuthor: Josh Adams <josh@isotope11.com>\nDescription: language definition for Elixir source code files (.ex and .exs).  Based on ruby language support.\nCategory: functional\nWebsite: https://elixir-lang.org\n*/\n\n/** @type LanguageFn */\nfunction elixir(hljs) {\n  const regex = hljs.regex;\n  const ELIXIR_IDENT_RE = '[a-zA-Z_][a-zA-Z0-9_.]*(!|\\\\?)?';\n  const ELIXIR_METHOD_RE = '[a-zA-Z_]\\\\w*[!?=]?|[-+~]@|<<|>>|=~|===?|<=>|[<>]=?|\\\\*\\\\*|[-/+%^&*~`|]|\\\\[\\\\]=?';\n  const KEYWORDS = [\n    \"after\",\n    \"alias\",\n    \"and\",\n    \"case\",\n    \"catch\",\n    \"cond\",\n    \"defstruct\",\n    \"defguard\",\n    \"do\",\n    \"else\",\n    \"end\",\n    \"fn\",\n    \"for\",\n    \"if\",\n    \"import\",\n    \"in\",\n    \"not\",\n    \"or\",\n    \"quote\",\n    \"raise\",\n    \"receive\",\n    \"require\",\n    \"reraise\",\n    \"rescue\",\n    \"try\",\n    \"unless\",\n    \"unquote\",\n    \"unquote_splicing\",\n    \"use\",\n    \"when\",\n    \"with|0\"\n  ];\n  const LITERALS = [\n    \"false\",\n    \"nil\",\n    \"true\"\n  ];\n  const KWS = {\n    $pattern: ELIXIR_IDENT_RE,\n    keyword: KEYWORDS,\n    literal: LITERALS\n  };\n  const SUBST = {\n    className: 'subst',\n    begin: /#\\{/,\n    end: /\\}/,\n    keywords: KWS\n  };\n  const NUMBER = {\n    className: 'number',\n    begin: '(\\\\b0o[0-7_]+)|(\\\\b0b[01_]+)|(\\\\b0x[0-9a-fA-F_]+)|(-?\\\\b[0-9][0-9_]*(\\\\.[0-9_]+([eE][-+]?[0-9]+)?)?)',\n    relevance: 0\n  };\n  // TODO: could be tightened\n  // https://elixir-lang.readthedocs.io/en/latest/intro/18.html\n  // but you also need to include closing delemeters in the escape list per\n  // individual sigil mode from what I can tell,\n  // ie: \\} might or might not be an escape depending on the sigil used\n  const ESCAPES_RE = /\\\\[\\s\\S]/;\n  // const ESCAPES_RE = /\\\\[\"'\\\\abdefnrstv0]/;\n  const BACKSLASH_ESCAPE = {\n    match: ESCAPES_RE,\n    scope: \"char.escape\",\n    relevance: 0\n  };\n  const SIGIL_DELIMITERS = '[/|([{<\"\\']';\n  const SIGIL_DELIMITER_MODES = [\n    {\n      begin: /\"/,\n      end: /\"/\n    },\n    {\n      begin: /'/,\n      end: /'/\n    },\n    {\n      begin: /\\//,\n      end: /\\//\n    },\n    {\n      begin: /\\|/,\n      end: /\\|/\n    },\n    {\n      begin: /\\(/,\n      end: /\\)/\n    },\n    {\n      begin: /\\[/,\n      end: /\\]/\n    },\n    {\n      begin: /\\{/,\n      end: /\\}/\n    },\n    {\n      begin: /</,\n      end: />/\n    }\n  ];\n  const escapeSigilEnd = (end) => {\n    return {\n      scope: \"char.escape\",\n      begin: regex.concat(/\\\\/, end),\n      relevance: 0\n    };\n  };\n  const LOWERCASE_SIGIL = {\n    className: 'string',\n    begin: '~[a-z]' + '(?=' + SIGIL_DELIMITERS + ')',\n    contains: SIGIL_DELIMITER_MODES.map(x => hljs.inherit(x,\n      { contains: [\n        escapeSigilEnd(x.end),\n        BACKSLASH_ESCAPE,\n        SUBST\n      ] }\n    ))\n  };\n\n  const UPCASE_SIGIL = {\n    className: 'string',\n    begin: '~[A-Z]' + '(?=' + SIGIL_DELIMITERS + ')',\n    contains: SIGIL_DELIMITER_MODES.map(x => hljs.inherit(x,\n      { contains: [ escapeSigilEnd(x.end) ] }\n    ))\n  };\n\n  const REGEX_SIGIL = {\n    className: 'regex',\n    variants: [\n      {\n        begin: '~r' + '(?=' + SIGIL_DELIMITERS + ')',\n        contains: SIGIL_DELIMITER_MODES.map(x => hljs.inherit(x,\n          {\n            end: regex.concat(x.end, /[uismxfU]{0,7}/),\n            contains: [\n              escapeSigilEnd(x.end),\n              BACKSLASH_ESCAPE,\n              SUBST\n            ]\n          }\n        ))\n      },\n      {\n        begin: '~R' + '(?=' + SIGIL_DELIMITERS + ')',\n        contains: SIGIL_DELIMITER_MODES.map(x => hljs.inherit(x,\n          {\n            end: regex.concat(x.end, /[uismxfU]{0,7}/),\n            contains: [ escapeSigilEnd(x.end) ]\n          })\n        )\n      }\n    ]\n  };\n\n  const STRING = {\n    className: 'string',\n    contains: [\n      hljs.BACKSLASH_ESCAPE,\n      SUBST\n    ],\n    variants: [\n      {\n        begin: /\"\"\"/,\n        end: /\"\"\"/\n      },\n      {\n        begin: /'''/,\n        end: /'''/\n      },\n      {\n        begin: /~S\"\"\"/,\n        end: /\"\"\"/,\n        contains: [] // override default\n      },\n      {\n        begin: /~S\"/,\n        end: /\"/,\n        contains: [] // override default\n      },\n      {\n        begin: /~S'''/,\n        end: /'''/,\n        contains: [] // override default\n      },\n      {\n        begin: /~S'/,\n        end: /'/,\n        contains: [] // override default\n      },\n      {\n        begin: /'/,\n        end: /'/\n      },\n      {\n        begin: /\"/,\n        end: /\"/\n      }\n    ]\n  };\n  const FUNCTION = {\n    className: 'function',\n    beginKeywords: 'def defp defmacro defmacrop',\n    end: /\\B\\b/, // the mode is ended by the title\n    contains: [\n      hljs.inherit(hljs.TITLE_MODE, {\n        begin: ELIXIR_IDENT_RE,\n        endsParent: true\n      })\n    ]\n  };\n  const CLASS = hljs.inherit(FUNCTION, {\n    className: 'class',\n    beginKeywords: 'defimpl defmodule defprotocol defrecord',\n    end: /\\bdo\\b|$|;/\n  });\n  const ELIXIR_DEFAULT_CONTAINS = [\n    STRING,\n    REGEX_SIGIL,\n    UPCASE_SIGIL,\n    LOWERCASE_SIGIL,\n    hljs.HASH_COMMENT_MODE,\n    CLASS,\n    FUNCTION,\n    { begin: '::' },\n    {\n      className: 'symbol',\n      begin: ':(?![\\\\s:])',\n      contains: [\n        STRING,\n        { begin: ELIXIR_METHOD_RE }\n      ],\n      relevance: 0\n    },\n    {\n      className: 'symbol',\n      begin: ELIXIR_IDENT_RE + ':(?!:)',\n      relevance: 0\n    },\n    { // Usage of a module, struct, etc.\n      className: 'title.class',\n      begin: /(\\b[A-Z][a-zA-Z0-9_]+)/,\n      relevance: 0\n    },\n    NUMBER,\n    {\n      className: 'variable',\n      begin: '(\\\\$\\\\W)|((\\\\$|@@?)(\\\\w+))'\n    }\n    // -> has been removed, capnproto always uses this grammar construct\n  ];\n  SUBST.contains = ELIXIR_DEFAULT_CONTAINS;\n\n  return {\n    name: 'Elixir',\n    aliases: [\n      'ex',\n      'exs'\n    ],\n    keywords: KWS,\n    contains: ELIXIR_DEFAULT_CONTAINS\n  };\n}\n\nmodule.exports = elixir;\n"],"names":["elixir","hljs","regex","ELIXIR_IDENT_RE","ELIXIR_METHOD_RE","KWS","SUBST","NUMBER","BACKSLASH_ESCAPE","SIGIL_DELIMITERS","SIGIL_DELIMITER_MODES","escapeSigilEnd","end","LOWERCASE_SIGIL","x","UPCASE_SIGIL","REGEX_SIGIL","STRING","FUNCTION","CLASS","ELIXIR_DEFAULT_CONTAINS","elixir_1"],"mappings":"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","x_google_ignoreList":[0]}