1{"version":3,"sources":["../../node_modules/codemirror/mode/slim/slim.js"],"names":["mod","exports","module","require","define","amd","CodeMirror","defineMode","config","htmlMode","getMode","name","rubyMode","modes","html","ruby","embedded","javascript","css","sass","scss","less","styl","coffee","asciidoc","markdown","textile","creole","wiki","mediawiki","rdoc","builder","nokogiri","erb","embeddedRegexp","map","arr","key","push","RegExp","join","styleMap","commentLine","slimSwitch","slimTag","slimId","slimClass","slimAttribute","slimSubmode","closeAttributeTag","slimDoctype","lineContinuation","closing","{","[","(","nameStartChar","nameChar","nameRegexp","attributeNameRegexp","wrappedAttributeNameRegexp","classNameRegexp","classIdRegexp","backup","pos","tokenize","style","restore","stream","state","maybeBackup","pat","offset","cur","current","idx","search","backUp","length","continueLine","column","stack","parent","indented","line","finishContinue","lineContinuable","match","eol","commaContinuable","rubyInQuote","endQuote","ch","peek","rubyState","next","startRubySplat","runSplat","context","prev","eatSpace","startState","token","htmlLine","htmlState","startHtmlLine","lastTokenize","startHtmlMode","comment","skipToEnd","commentMode","attributeWrapper","eat","attributeWrapperAssign","attributeWrapperValue","readQuoted","startAttributeWrapperMode","sub","subStream","StringStream","string","slice","tabSize","start","lastColumnPos","lastColumnValue","subMode","subState","firstSub","createMode","mode","query","spec","mimeModes","factory","hasOwnProperty","startSubMode","doctypeLine","_state","startLine","m","slim","startOfLine","slimTagExtras","$1","slimAttributeAssign","slimContent","slimAttributeValue","slimAttributeSymbols","quote","embed","unescaped","nextTokenize","fresh","escaped","last","copyState","sol","indentation","blankLine","innerMode","defineMIME"],"mappings":"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","file":"slim.min.js","sourcesContent":["// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n// Slim Highlighting for CodeMirror copyright (c) HicknHack Software Gmbh\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"), require(\"../htmlmixed/htmlmixed\"), require(\"../ruby/ruby\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\", \"../htmlmixed/htmlmixed\", \"../ruby/ruby\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\n  CodeMirror.defineMode(\"slim\", function(config) {\n    var htmlMode = CodeMirror.getMode(config, {name: \"htmlmixed\"});\n    var rubyMode = CodeMirror.getMode(config, \"ruby\");\n    var modes = { html: htmlMode, ruby: rubyMode };\n    var embedded = {\n      ruby: \"ruby\",\n      javascript: \"javascript\",\n      css: \"text/css\",\n      sass: \"text/x-sass\",\n      scss: \"text/x-scss\",\n      less: \"text/x-less\",\n      styl: \"text/x-styl\", // no highlighting so far\n      coffee: \"coffeescript\",\n      asciidoc: \"text/x-asciidoc\",\n      markdown: \"text/x-markdown\",\n      textile: \"text/x-textile\", // no highlighting so far\n      creole: \"text/x-creole\", // no highlighting so far\n      wiki: \"text/x-wiki\", // no highlighting so far\n      mediawiki: \"text/x-mediawiki\", // no highlighting so far\n      rdoc: \"text/x-rdoc\", // no highlighting so far\n      builder: \"text/x-builder\", // no highlighting so far\n      nokogiri: \"text/x-nokogiri\", // no highlighting so far\n      erb: \"application/x-erb\"\n    };\n    var embeddedRegexp = function(map){\n      var arr = [];\n      for(var key in map) arr.push(key);\n      return new RegExp(\"^(\"+arr.join('|')+\"):\");\n    }(embedded);\n\n    var styleMap = {\n      \"commentLine\": \"comment\",\n      \"slimSwitch\": \"operator special\",\n      \"slimTag\": \"tag\",\n      \"slimId\": \"attribute def\",\n      \"slimClass\": \"attribute qualifier\",\n      \"slimAttribute\": \"attribute\",\n      \"slimSubmode\": \"keyword special\",\n      \"closeAttributeTag\": null,\n      \"slimDoctype\": null,\n      \"lineContinuation\": null\n    };\n    var closing = {\n      \"{\": \"}\",\n      \"[\": \"]\",\n      \"(\": \")\"\n    };\n\n    var nameStartChar = \"_a-zA-Z\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\";\n    var nameChar = nameStartChar + \"\\\\-0-9\\xB7\\u0300-\\u036F\\u203F-\\u2040\";\n    var nameRegexp = new RegExp(\"^[:\"+nameStartChar+\"](?::[\"+nameChar+\"]|[\"+nameChar+\"]*)\");\n    var attributeNameRegexp = new RegExp(\"^[:\"+nameStartChar+\"][:\\\\.\"+nameChar+\"]*(?=\\\\s*=)\");\n    var wrappedAttributeNameRegexp = new RegExp(\"^[:\"+nameStartChar+\"][:\\\\.\"+nameChar+\"]*\");\n    var classNameRegexp = /^\\.-?[_a-zA-Z]+[\\w\\-]*/;\n    var classIdRegexp = /^#[_a-zA-Z]+[\\w\\-]*/;\n\n    function backup(pos, tokenize, style) {\n      var restore = function(stream, state) {\n        state.tokenize = tokenize;\n        if (stream.pos < pos) {\n          stream.pos = pos;\n          return style;\n        }\n        return state.tokenize(stream, state);\n      };\n      return function(stream, state) {\n        state.tokenize = restore;\n        return tokenize(stream, state);\n      };\n    }\n\n    function maybeBackup(stream, state, pat, offset, style) {\n      var cur = stream.current();\n      var idx = cur.search(pat);\n      if (idx > -1) {\n        state.tokenize = backup(stream.pos, state.tokenize, style);\n        stream.backUp(cur.length - idx - offset);\n      }\n      return style;\n    }\n\n    function continueLine(state, column) {\n      state.stack = {\n        parent: state.stack,\n        style: \"continuation\",\n        indented: column,\n        tokenize: state.line\n      };\n      state.line = state.tokenize;\n    }\n    function finishContinue(state) {\n      if (state.line == state.tokenize) {\n        state.line = state.stack.tokenize;\n        state.stack = state.stack.parent;\n      }\n    }\n\n    function lineContinuable(column, tokenize) {\n      return function(stream, state) {\n        finishContinue(state);\n        if (stream.match(/^\\\\$/)) {\n          continueLine(state, column);\n          return \"lineContinuation\";\n        }\n        var style = tokenize(stream, state);\n        if (stream.eol() && stream.current().match(/(?:^|[^\\\\])(?:\\\\\\\\)*\\\\$/)) {\n          stream.backUp(1);\n        }\n        return style;\n      };\n    }\n    function commaContinuable(column, tokenize) {\n      return function(stream, state) {\n        finishContinue(state);\n        var style = tokenize(stream, state);\n        if (stream.eol() && stream.current().match(/,$/)) {\n          continueLine(state, column);\n        }\n        return style;\n      };\n    }\n\n    function rubyInQuote(endQuote, tokenize) {\n      // TODO: add multi line support\n      return function(stream, state) {\n        var ch = stream.peek();\n        if (ch == endQuote && state.rubyState.tokenize.length == 1) {\n          // step out of ruby context as it seems to complete processing all the braces\n          stream.next();\n          state.tokenize = tokenize;\n          return \"closeAttributeTag\";\n        } else {\n          return ruby(stream, state);\n        }\n      };\n    }\n    function startRubySplat(tokenize) {\n      var rubyState;\n      var runSplat = function(stream, state) {\n        if (state.rubyState.tokenize.length == 1 && !state.rubyState.context.prev) {\n          stream.backUp(1);\n          if (stream.eatSpace()) {\n            state.rubyState = rubyState;\n            state.tokenize = tokenize;\n            return tokenize(stream, state);\n          }\n          stream.next();\n        }\n        return ruby(stream, state);\n      };\n      return function(stream, state) {\n        rubyState = state.rubyState;\n        state.rubyState = CodeMirror.startState(rubyMode);\n        state.tokenize = runSplat;\n        return ruby(stream, state);\n      };\n    }\n\n    function ruby(stream, state) {\n      return rubyMode.token(stream, state.rubyState);\n    }\n\n    function htmlLine(stream, state) {\n      if (stream.match(/^\\\\$/)) {\n        return \"lineContinuation\";\n      }\n      return html(stream, state);\n    }\n    function html(stream, state) {\n      if (stream.match(/^#\\{/)) {\n        state.tokenize = rubyInQuote(\"}\", state.tokenize);\n        return null;\n      }\n      return maybeBackup(stream, state, /[^\\\\]#\\{/, 1, htmlMode.token(stream, state.htmlState));\n    }\n\n    function startHtmlLine(lastTokenize) {\n      return function(stream, state) {\n        var style = htmlLine(stream, state);\n        if (stream.eol()) state.tokenize = lastTokenize;\n        return style;\n      };\n    }\n\n    function startHtmlMode(stream, state, offset) {\n      state.stack = {\n        parent: state.stack,\n        style: \"html\",\n        indented: stream.column() + offset, // pipe + space\n        tokenize: state.line\n      };\n      state.line = state.tokenize = html;\n      return null;\n    }\n\n    function comment(stream, state) {\n      stream.skipToEnd();\n      return state.stack.style;\n    }\n\n    function commentMode(stream, state) {\n      state.stack = {\n        parent: state.stack,\n        style: \"comment\",\n        indented: state.indented + 1,\n        tokenize: state.line\n      };\n      state.line = comment;\n      return comment(stream, state);\n    }\n\n    function attributeWrapper(stream, state) {\n      if (stream.eat(state.stack.endQuote)) {\n        state.line = state.stack.line;\n        state.tokenize = state.stack.tokenize;\n        state.stack = state.stack.parent;\n        return null;\n      }\n      if (stream.match(wrappedAttributeNameRegexp)) {\n        state.tokenize = attributeWrapperAssign;\n        return \"slimAttribute\";\n      }\n      stream.next();\n      return null;\n    }\n    function attributeWrapperAssign(stream, state) {\n      if (stream.match(/^==?/)) {\n        state.tokenize = attributeWrapperValue;\n        return null;\n      }\n      return attributeWrapper(stream, state);\n    }\n    function attributeWrapperValue(stream, state) {\n      var ch = stream.peek();\n      if (ch == '\"' || ch == \"\\'\") {\n        state.tokenize = readQuoted(ch, \"string\", true, false, attributeWrapper);\n        stream.next();\n        return state.tokenize(stream, state);\n      }\n      if (ch == '[') {\n        return startRubySplat(attributeWrapper)(stream, state);\n      }\n      if (stream.match(/^(true|false|nil)\\b/)) {\n        state.tokenize = attributeWrapper;\n        return \"keyword\";\n      }\n      return startRubySplat(attributeWrapper)(stream, state);\n    }\n\n    function startAttributeWrapperMode(state, endQuote, tokenize) {\n      state.stack = {\n        parent: state.stack,\n        style: \"wrapper\",\n        indented: state.indented + 1,\n        tokenize: tokenize,\n        line: state.line,\n        endQuote: endQuote\n      };\n      state.line = state.tokenize = attributeWrapper;\n      return null;\n    }\n\n    function sub(stream, state) {\n      if (stream.match(/^#\\{/)) {\n        state.tokenize = rubyInQuote(\"}\", state.tokenize);\n        return null;\n      }\n      var subStream = new CodeMirror.StringStream(stream.string.slice(state.stack.indented), stream.tabSize);\n      subStream.pos = stream.pos - state.stack.indented;\n      subStream.start = stream.start - state.stack.indented;\n      subStream.lastColumnPos = stream.lastColumnPos - state.stack.indented;\n      subStream.lastColumnValue = stream.lastColumnValue - state.stack.indented;\n      var style = state.subMode.token(subStream, state.subState);\n      stream.pos = subStream.pos + state.stack.indented;\n      return style;\n    }\n    function firstSub(stream, state) {\n      state.stack.indented = stream.column();\n      state.line = state.tokenize = sub;\n      return state.tokenize(stream, state);\n    }\n\n    function createMode(mode) {\n      var query = embedded[mode];\n      var spec = CodeMirror.mimeModes[query];\n      if (spec) {\n        return CodeMirror.getMode(config, spec);\n      }\n      var factory = CodeMirror.modes[query];\n      if (factory) {\n        return factory(config, {name: query});\n      }\n      return CodeMirror.getMode(config, \"null\");\n    }\n\n    function getMode(mode) {\n      if (!modes.hasOwnProperty(mode)) {\n        return modes[mode] = createMode(mode);\n      }\n      return modes[mode];\n    }\n\n    function startSubMode(mode, state) {\n      var subMode = getMode(mode);\n      var subState = CodeMirror.startState(subMode);\n\n      state.subMode = subMode;\n      state.subState = subState;\n\n      state.stack = {\n        parent: state.stack,\n        style: \"sub\",\n        indented: state.indented + 1,\n        tokenize: state.line\n      };\n      state.line = state.tokenize = firstSub;\n      return \"slimSubmode\";\n    }\n\n    function doctypeLine(stream, _state) {\n      stream.skipToEnd();\n      return \"slimDoctype\";\n    }\n\n    function startLine(stream, state) {\n      var ch = stream.peek();\n      if (ch == '<') {\n        return (state.tokenize = startHtmlLine(state.tokenize))(stream, state);\n      }\n      if (stream.match(/^[|']/)) {\n        return startHtmlMode(stream, state, 1);\n      }\n      if (stream.match(/^\\/(!|\\[\\w+])?/)) {\n        return commentMode(stream, state);\n      }\n      if (stream.match(/^(-|==?[<>]?)/)) {\n        state.tokenize = lineContinuable(stream.column(), commaContinuable(stream.column(), ruby));\n        return \"slimSwitch\";\n      }\n      if (stream.match(/^doctype\\b/)) {\n        state.tokenize = doctypeLine;\n        return \"keyword\";\n      }\n\n      var m = stream.match(embeddedRegexp);\n      if (m) {\n        return startSubMode(m[1], state);\n      }\n\n      return slimTag(stream, state);\n    }\n\n    function slim(stream, state) {\n      if (state.startOfLine) {\n        return startLine(stream, state);\n      }\n      return slimTag(stream, state);\n    }\n\n    function slimTag(stream, state) {\n      if (stream.eat('*')) {\n        state.tokenize = startRubySplat(slimTagExtras);\n        return null;\n      }\n      if (stream.match(nameRegexp)) {\n        state.tokenize = slimTagExtras;\n        return \"slimTag\";\n      }\n      return slimClass(stream, state);\n    }\n    function slimTagExtras(stream, state) {\n      if (stream.match(/^(<>?|><?)/)) {\n        state.tokenize = slimClass;\n        return null;\n      }\n      return slimClass(stream, state);\n    }\n    function slimClass(stream, state) {\n      if (stream.match(classIdRegexp)) {\n        state.tokenize = slimClass;\n        return \"slimId\";\n      }\n      if (stream.match(classNameRegexp)) {\n        state.tokenize = slimClass;\n        return \"slimClass\";\n      }\n      return slimAttribute(stream, state);\n    }\n    function slimAttribute(stream, state) {\n      if (stream.match(/^([\\[\\{\\(])/)) {\n        return startAttributeWrapperMode(state, closing[RegExp.$1], slimAttribute);\n      }\n      if (stream.match(attributeNameRegexp)) {\n        state.tokenize = slimAttributeAssign;\n        return \"slimAttribute\";\n      }\n      if (stream.peek() == '*') {\n        stream.next();\n        state.tokenize = startRubySplat(slimContent);\n        return null;\n      }\n      return slimContent(stream, state);\n    }\n    function slimAttributeAssign(stream, state) {\n      if (stream.match(/^==?/)) {\n        state.tokenize = slimAttributeValue;\n        return null;\n      }\n      // should never happen, because of forward lookup\n      return slimAttribute(stream, state);\n    }\n\n    function slimAttributeValue(stream, state) {\n      var ch = stream.peek();\n      if (ch == '\"' || ch == \"\\'\") {\n        state.tokenize = readQuoted(ch, \"string\", true, false, slimAttribute);\n        stream.next();\n        return state.tokenize(stream, state);\n      }\n      if (ch == '[') {\n        return startRubySplat(slimAttribute)(stream, state);\n      }\n      if (ch == ':') {\n        return startRubySplat(slimAttributeSymbols)(stream, state);\n      }\n      if (stream.match(/^(true|false|nil)\\b/)) {\n        state.tokenize = slimAttribute;\n        return \"keyword\";\n      }\n      return startRubySplat(slimAttribute)(stream, state);\n    }\n    function slimAttributeSymbols(stream, state) {\n      stream.backUp(1);\n      if (stream.match(/^[^\\s],(?=:)/)) {\n        state.tokenize = startRubySplat(slimAttributeSymbols);\n        return null;\n      }\n      stream.next();\n      return slimAttribute(stream, state);\n    }\n    function readQuoted(quote, style, embed, unescaped, nextTokenize) {\n      return function(stream, state) {\n        finishContinue(state);\n        var fresh = stream.current().length == 0;\n        if (stream.match(/^\\\\$/, fresh)) {\n          if (!fresh) return style;\n          continueLine(state, state.indented);\n          return \"lineContinuation\";\n        }\n        if (stream.match(/^#\\{/, fresh)) {\n          if (!fresh) return style;\n          state.tokenize = rubyInQuote(\"}\", state.tokenize);\n          return null;\n        }\n        var escaped = false, ch;\n        while ((ch = stream.next()) != null) {\n          if (ch == quote && (unescaped || !escaped)) {\n            state.tokenize = nextTokenize;\n            break;\n          }\n          if (embed && ch == \"#\" && !escaped) {\n            if (stream.eat(\"{\")) {\n              stream.backUp(2);\n              break;\n            }\n          }\n          escaped = !escaped && ch == \"\\\\\";\n        }\n        if (stream.eol() && escaped) {\n          stream.backUp(1);\n        }\n        return style;\n      };\n    }\n    function slimContent(stream, state) {\n      if (stream.match(/^==?/)) {\n        state.tokenize = ruby;\n        return \"slimSwitch\";\n      }\n      if (stream.match(/^\\/$/)) { // tag close hint\n        state.tokenize = slim;\n        return null;\n      }\n      if (stream.match(/^:/)) { // inline tag\n        state.tokenize = slimTag;\n        return \"slimSwitch\";\n      }\n      startHtmlMode(stream, state, 0);\n      return state.tokenize(stream, state);\n    }\n\n    var mode = {\n      // default to html mode\n      startState: function() {\n        var htmlState = CodeMirror.startState(htmlMode);\n        var rubyState = CodeMirror.startState(rubyMode);\n        return {\n          htmlState: htmlState,\n          rubyState: rubyState,\n          stack: null,\n          last: null,\n          tokenize: slim,\n          line: slim,\n          indented: 0\n        };\n      },\n\n      copyState: function(state) {\n        return {\n          htmlState : CodeMirror.copyState(htmlMode, state.htmlState),\n          rubyState: CodeMirror.copyState(rubyMode, state.rubyState),\n          subMode: state.subMode,\n          subState: state.subMode && CodeMirror.copyState(state.subMode, state.subState),\n          stack: state.stack,\n          last: state.last,\n          tokenize: state.tokenize,\n          line: state.line\n        };\n      },\n\n      token: function(stream, state) {\n        if (stream.sol()) {\n          state.indented = stream.indentation();\n          state.startOfLine = true;\n          state.tokenize = state.line;\n          while (state.stack && state.stack.indented > state.indented && state.last != \"slimSubmode\") {\n            state.line = state.tokenize = state.stack.tokenize;\n            state.stack = state.stack.parent;\n            state.subMode = null;\n            state.subState = null;\n          }\n        }\n        if (stream.eatSpace()) return null;\n        var style = state.tokenize(stream, state);\n        state.startOfLine = false;\n        if (style) state.last = style;\n        return styleMap.hasOwnProperty(style) ? styleMap[style] : style;\n      },\n\n      blankLine: function(state) {\n        if (state.subMode && state.subMode.blankLine) {\n          return state.subMode.blankLine(state.subState);\n        }\n      },\n\n      innerMode: function(state) {\n        if (state.subMode) return {state: state.subState, mode: state.subMode};\n        return {state: state, mode: mode};\n      }\n\n      //indent: function(state) {\n      //  return state.indented;\n      //}\n    };\n    return mode;\n  }, \"htmlmixed\", \"ruby\");\n\n  CodeMirror.defineMIME(\"text/x-slim\", \"slim\");\n  CodeMirror.defineMIME(\"application/x-slim\", \"slim\");\n});\n"]}