1{"version":3,"sources":["../../node_modules/codemirror/mode/sass/sass.js"],"names":["mod","exports","module","require","define","amd","CodeMirror","defineMode","config","cssMode","mimeModes","propertyKeywords","colorKeywords","valueKeywords","fontProperties","tokenRegexp","words","RegExp","join","keywords","keywordsRegexp","operators","opRegexp","pseudoElementsRegexp","word","isEndLine","stream","peek","match","urlTokens","state","ch","next","tokenizer","tokenBase","eatSpace","buildStringTokenizer","comment","indentation","multiLine","sol","skipTo","skipToEnd","quote","greedy","stringTokenizer","nextChar","peekChar","previousChar","string","charAt","pos","endingString","cursorHalf","buildInterpolationTokenizer","currentTokenizer","indent","indentCount","lastScopeOffset","scopes","offset","currentOffset","indentUnit","unshift","dedent","length","shift","eatWhile","current","toLowerCase","prop","prevProp","hasOwnProperty","tokenLexer","style","startOfToken","withCurrentIndent","newScopes","i","scope","push","startState","type","definedVars","definedMixins","token","lastToken","content","defineMIME"],"mappings":"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","file":"sass.min.js","sourcesContent":["// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"), require(\"../css/css\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\", \"../css/css\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nCodeMirror.defineMode(\"sass\", function(config) {\n  var cssMode = CodeMirror.mimeModes[\"text/css\"];\n  var propertyKeywords = cssMode.propertyKeywords || {},\n      colorKeywords = cssMode.colorKeywords || {},\n      valueKeywords = cssMode.valueKeywords || {},\n      fontProperties = cssMode.fontProperties || {};\n\n  function tokenRegexp(words) {\n    return new RegExp(\"^\" + words.join(\"|\"));\n  }\n\n  var keywords = [\"true\", \"false\", \"null\", \"auto\"];\n  var keywordsRegexp = new RegExp(\"^\" + keywords.join(\"|\"));\n\n  var operators = [\"\\\\(\", \"\\\\)\", \"=\", \">\", \"<\", \"==\", \">=\", \"<=\", \"\\\\+\", \"-\",\n                   \"\\\\!=\", \"/\", \"\\\\*\", \"%\", \"and\", \"or\", \"not\", \";\",\"\\\\{\",\"\\\\}\",\":\"];\n  var opRegexp = tokenRegexp(operators);\n\n  var pseudoElementsRegexp = /^::?[a-zA-Z_][\\w\\-]*/;\n\n  var word;\n\n  function isEndLine(stream) {\n    return !stream.peek() || stream.match(/\\s+$/, false);\n  }\n\n  function urlTokens(stream, state) {\n    var ch = stream.peek();\n\n    if (ch === \")\") {\n      stream.next();\n      state.tokenizer = tokenBase;\n      return \"operator\";\n    } else if (ch === \"(\") {\n      stream.next();\n      stream.eatSpace();\n\n      return \"operator\";\n    } else if (ch === \"'\" || ch === '\"') {\n      state.tokenizer = buildStringTokenizer(stream.next());\n      return \"string\";\n    } else {\n      state.tokenizer = buildStringTokenizer(\")\", false);\n      return \"string\";\n    }\n  }\n  function comment(indentation, multiLine) {\n    return function(stream, state) {\n      if (stream.sol() && stream.indentation() <= indentation) {\n        state.tokenizer = tokenBase;\n        return tokenBase(stream, state);\n      }\n\n      if (multiLine && stream.skipTo(\"*/\")) {\n        stream.next();\n        stream.next();\n        state.tokenizer = tokenBase;\n      } else {\n        stream.skipToEnd();\n      }\n\n      return \"comment\";\n    };\n  }\n\n  function buildStringTokenizer(quote, greedy) {\n    if (greedy == null) { greedy = true; }\n\n    function stringTokenizer(stream, state) {\n      var nextChar = stream.next();\n      var peekChar = stream.peek();\n      var previousChar = stream.string.charAt(stream.pos-2);\n\n      var endingString = ((nextChar !== \"\\\\\" && peekChar === quote) || (nextChar === quote && previousChar !== \"\\\\\"));\n\n      if (endingString) {\n        if (nextChar !== quote && greedy) { stream.next(); }\n        if (isEndLine(stream)) {\n          state.cursorHalf = 0;\n        }\n        state.tokenizer = tokenBase;\n        return \"string\";\n      } else if (nextChar === \"#\" && peekChar === \"{\") {\n        state.tokenizer = buildInterpolationTokenizer(stringTokenizer);\n        stream.next();\n        return \"operator\";\n      } else {\n        return \"string\";\n      }\n    }\n\n    return stringTokenizer;\n  }\n\n  function buildInterpolationTokenizer(currentTokenizer) {\n    return function(stream, state) {\n      if (stream.peek() === \"}\") {\n        stream.next();\n        state.tokenizer = currentTokenizer;\n        return \"operator\";\n      } else {\n        return tokenBase(stream, state);\n      }\n    };\n  }\n\n  function indent(state) {\n    if (state.indentCount == 0) {\n      state.indentCount++;\n      var lastScopeOffset = state.scopes[0].offset;\n      var currentOffset = lastScopeOffset + config.indentUnit;\n      state.scopes.unshift({ offset:currentOffset });\n    }\n  }\n\n  function dedent(state) {\n    if (state.scopes.length == 1) return;\n\n    state.scopes.shift();\n  }\n\n  function tokenBase(stream, state) {\n    var ch = stream.peek();\n\n    // Comment\n    if (stream.match(\"/*\")) {\n      state.tokenizer = comment(stream.indentation(), true);\n      return state.tokenizer(stream, state);\n    }\n    if (stream.match(\"//\")) {\n      state.tokenizer = comment(stream.indentation(), false);\n      return state.tokenizer(stream, state);\n    }\n\n    // Interpolation\n    if (stream.match(\"#{\")) {\n      state.tokenizer = buildInterpolationTokenizer(tokenBase);\n      return \"operator\";\n    }\n\n    // Strings\n    if (ch === '\"' || ch === \"'\") {\n      stream.next();\n      state.tokenizer = buildStringTokenizer(ch);\n      return \"string\";\n    }\n\n    if(!state.cursorHalf){// state.cursorHalf === 0\n    // first half i.e. before : for key-value pairs\n    // including selectors\n\n      if (ch === \"-\") {\n        if (stream.match(/^-\\w+-/)) {\n          return \"meta\";\n        }\n      }\n\n      if (ch === \".\") {\n        stream.next();\n        if (stream.match(/^[\\w-]+/)) {\n          indent(state);\n          return \"qualifier\";\n        } else if (stream.peek() === \"#\") {\n          indent(state);\n          return \"tag\";\n        }\n      }\n\n      if (ch === \"#\") {\n        stream.next();\n        // ID selectors\n        if (stream.match(/^[\\w-]+/)) {\n          indent(state);\n          return \"builtin\";\n        }\n        if (stream.peek() === \"#\") {\n          indent(state);\n          return \"tag\";\n        }\n      }\n\n      // Variables\n      if (ch === \"$\") {\n        stream.next();\n        stream.eatWhile(/[\\w-]/);\n        return \"variable-2\";\n      }\n\n      // Numbers\n      if (stream.match(/^-?[0-9\\.]+/))\n        return \"number\";\n\n      // Units\n      if (stream.match(/^(px|em|in)\\b/))\n        return \"unit\";\n\n      if (stream.match(keywordsRegexp))\n        return \"keyword\";\n\n      if (stream.match(/^url/) && stream.peek() === \"(\") {\n        state.tokenizer = urlTokens;\n        return \"atom\";\n      }\n\n      if (ch === \"=\") {\n        // Match shortcut mixin definition\n        if (stream.match(/^=[\\w-]+/)) {\n          indent(state);\n          return \"meta\";\n        }\n      }\n\n      if (ch === \"+\") {\n        // Match shortcut mixin definition\n        if (stream.match(/^\\+[\\w-]+/)){\n          return \"variable-3\";\n        }\n      }\n\n      if(ch === \"@\"){\n        if(stream.match(/@extend/)){\n          if(!stream.match(/\\s*[\\w]/))\n            dedent(state);\n        }\n      }\n\n\n      // Indent Directives\n      if (stream.match(/^@(else if|if|media|else|for|each|while|mixin|function)/)) {\n        indent(state);\n        return \"def\";\n      }\n\n      // Other Directives\n      if (ch === \"@\") {\n        stream.next();\n        stream.eatWhile(/[\\w-]/);\n        return \"def\";\n      }\n\n      if (stream.eatWhile(/[\\w-]/)){\n        if(stream.match(/ *: *[\\w-\\+\\$#!\\(\"']/,false)){\n          word = stream.current().toLowerCase();\n          var prop = state.prevProp + \"-\" + word;\n          if (propertyKeywords.hasOwnProperty(prop)) {\n            return \"property\";\n          } else if (propertyKeywords.hasOwnProperty(word)) {\n            state.prevProp = word;\n            return \"property\";\n          } else if (fontProperties.hasOwnProperty(word)) {\n            return \"property\";\n          }\n          return \"tag\";\n        }\n        else if(stream.match(/ *:/,false)){\n          indent(state);\n          state.cursorHalf = 1;\n          state.prevProp = stream.current().toLowerCase();\n          return \"property\";\n        }\n        else if(stream.match(/ *,/,false)){\n          return \"tag\";\n        }\n        else{\n          indent(state);\n          return \"tag\";\n        }\n      }\n\n      if(ch === \":\"){\n        if (stream.match(pseudoElementsRegexp)){ // could be a pseudo-element\n          return \"variable-3\";\n        }\n        stream.next();\n        state.cursorHalf=1;\n        return \"operator\";\n      }\n\n    } // cursorHalf===0 ends here\n    else{\n\n      if (ch === \"#\") {\n        stream.next();\n        // Hex numbers\n        if (stream.match(/[0-9a-fA-F]{6}|[0-9a-fA-F]{3}/)){\n          if (isEndLine(stream)) {\n            state.cursorHalf = 0;\n          }\n          return \"number\";\n        }\n      }\n\n      // Numbers\n      if (stream.match(/^-?[0-9\\.]+/)){\n        if (isEndLine(stream)) {\n          state.cursorHalf = 0;\n        }\n        return \"number\";\n      }\n\n      // Units\n      if (stream.match(/^(px|em|in)\\b/)){\n        if (isEndLine(stream)) {\n          state.cursorHalf = 0;\n        }\n        return \"unit\";\n      }\n\n      if (stream.match(keywordsRegexp)){\n        if (isEndLine(stream)) {\n          state.cursorHalf = 0;\n        }\n        return \"keyword\";\n      }\n\n      if (stream.match(/^url/) && stream.peek() === \"(\") {\n        state.tokenizer = urlTokens;\n        if (isEndLine(stream)) {\n          state.cursorHalf = 0;\n        }\n        return \"atom\";\n      }\n\n      // Variables\n      if (ch === \"$\") {\n        stream.next();\n        stream.eatWhile(/[\\w-]/);\n        if (isEndLine(stream)) {\n          state.cursorHalf = 0;\n        }\n        return \"variable-2\";\n      }\n\n      // bang character for !important, !default, etc.\n      if (ch === \"!\") {\n        stream.next();\n        state.cursorHalf = 0;\n        return stream.match(/^[\\w]+/) ? \"keyword\": \"operator\";\n      }\n\n      if (stream.match(opRegexp)){\n        if (isEndLine(stream)) {\n          state.cursorHalf = 0;\n        }\n        return \"operator\";\n      }\n\n      // attributes\n      if (stream.eatWhile(/[\\w-]/)) {\n        if (isEndLine(stream)) {\n          state.cursorHalf = 0;\n        }\n        word = stream.current().toLowerCase();\n        if (valueKeywords.hasOwnProperty(word)) {\n          return \"atom\";\n        } else if (colorKeywords.hasOwnProperty(word)) {\n          return \"keyword\";\n        } else if (propertyKeywords.hasOwnProperty(word)) {\n          state.prevProp = stream.current().toLowerCase();\n          return \"property\";\n        } else {\n          return \"tag\";\n        }\n      }\n\n      //stream.eatSpace();\n      if (isEndLine(stream)) {\n        state.cursorHalf = 0;\n        return null;\n      }\n\n    } // else ends here\n\n    if (stream.match(opRegexp))\n      return \"operator\";\n\n    // If we haven't returned by now, we move 1 character\n    // and return an error\n    stream.next();\n    return null;\n  }\n\n  function tokenLexer(stream, state) {\n    if (stream.sol()) state.indentCount = 0;\n    var style = state.tokenizer(stream, state);\n    var current = stream.current();\n\n    if (current === \"@return\" || current === \"}\"){\n      dedent(state);\n    }\n\n    if (style !== null) {\n      var startOfToken = stream.pos - current.length;\n\n      var withCurrentIndent = startOfToken + (config.indentUnit * state.indentCount);\n\n      var newScopes = [];\n\n      for (var i = 0; i < state.scopes.length; i++) {\n        var scope = state.scopes[i];\n\n        if (scope.offset <= withCurrentIndent)\n          newScopes.push(scope);\n      }\n\n      state.scopes = newScopes;\n    }\n\n\n    return style;\n  }\n\n  return {\n    startState: function() {\n      return {\n        tokenizer: tokenBase,\n        scopes: [{offset: 0, type: \"sass\"}],\n        indentCount: 0,\n        cursorHalf: 0,  // cursor half tells us if cursor lies after (1)\n                        // or before (0) colon (well... more or less)\n        definedVars: [],\n        definedMixins: []\n      };\n    },\n    token: function(stream, state) {\n      var style = tokenLexer(stream, state);\n\n      state.lastToken = { style: style, content: stream.current() };\n\n      return style;\n    },\n\n    indent: function(state) {\n      return state.scopes[0].offset;\n    }\n  };\n}, \"css\");\n\nCodeMirror.defineMIME(\"text/x-sass\", \"sass\");\n\n});\n"]}