1{"version":3,"sources":["../../node_modules/codemirror/mode/sieve/sieve.js"],"names":["mod","exports","module","require","define","amd","CodeMirror","defineMode","config","words","str","obj","split","i","length","keywords","atoms","indentUnit","tokenBase","stream","state","ch","next","eat","tokenize","tokenCComment","skipToEnd","tokenString","_indent","push","pop","test","eatWhile","cur","current","tokenMultiLineString","propertyIsEnumerable","_multiLineString","sol","eatSpace","peek","eol","maybeEnd","quote","escaped","startState","base","baseIndent","token","indent","_textAfter","electricChars","defineMIME"],"mappings":"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","file":"sieve.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\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nCodeMirror.defineMode(\"sieve\", function(config) {\n  function words(str) {\n    var obj = {}, words = str.split(\" \");\n    for (var i = 0; i < words.length; ++i) obj[words[i]] = true;\n    return obj;\n  }\n\n  var keywords = words(\"if elsif else stop require\");\n  var atoms = words(\"true false not\");\n  var indentUnit = config.indentUnit;\n\n  function tokenBase(stream, state) {\n\n    var ch = stream.next();\n    if (ch == \"/\" && stream.eat(\"*\")) {\n      state.tokenize = tokenCComment;\n      return tokenCComment(stream, state);\n    }\n\n    if (ch === '#') {\n      stream.skipToEnd();\n      return \"comment\";\n    }\n\n    if (ch == \"\\\"\") {\n      state.tokenize = tokenString(ch);\n      return state.tokenize(stream, state);\n    }\n\n    if (ch == \"(\") {\n      state._indent.push(\"(\");\n      // add virtual angel wings so that editor behaves...\n      // ...more sane incase of broken brackets\n      state._indent.push(\"{\");\n      return null;\n    }\n\n    if (ch === \"{\") {\n      state._indent.push(\"{\");\n      return null;\n    }\n\n    if (ch == \")\")  {\n      state._indent.pop();\n      state._indent.pop();\n    }\n\n    if (ch === \"}\") {\n      state._indent.pop();\n      return null;\n    }\n\n    if (ch == \",\")\n      return null;\n\n    if (ch == \";\")\n      return null;\n\n\n    if (/[{}\\(\\),;]/.test(ch))\n      return null;\n\n    // 1*DIGIT \"K\" / \"M\" / \"G\"\n    if (/\\d/.test(ch)) {\n      stream.eatWhile(/[\\d]/);\n      stream.eat(/[KkMmGg]/);\n      return \"number\";\n    }\n\n    // \":\" (ALPHA / \"_\") *(ALPHA / DIGIT / \"_\")\n    if (ch == \":\") {\n      stream.eatWhile(/[a-zA-Z_]/);\n      stream.eatWhile(/[a-zA-Z0-9_]/);\n\n      return \"operator\";\n    }\n\n    stream.eatWhile(/\\w/);\n    var cur = stream.current();\n\n    // \"text:\" *(SP / HTAB) (hash-comment / CRLF)\n    // *(multiline-literal / multiline-dotstart)\n    // \".\" CRLF\n    if ((cur == \"text\") && stream.eat(\":\"))\n    {\n      state.tokenize = tokenMultiLineString;\n      return \"string\";\n    }\n\n    if (keywords.propertyIsEnumerable(cur))\n      return \"keyword\";\n\n    if (atoms.propertyIsEnumerable(cur))\n      return \"atom\";\n\n    return null;\n  }\n\n  function tokenMultiLineString(stream, state)\n  {\n    state._multiLineString = true;\n    // the first line is special it may contain a comment\n    if (!stream.sol()) {\n      stream.eatSpace();\n\n      if (stream.peek() == \"#\") {\n        stream.skipToEnd();\n        return \"comment\";\n      }\n\n      stream.skipToEnd();\n      return \"string\";\n    }\n\n    if ((stream.next() == \".\")  && (stream.eol()))\n    {\n      state._multiLineString = false;\n      state.tokenize = tokenBase;\n    }\n\n    return \"string\";\n  }\n\n  function tokenCComment(stream, state) {\n    var maybeEnd = false, ch;\n    while ((ch = stream.next()) != null) {\n      if (maybeEnd && ch == \"/\") {\n        state.tokenize = tokenBase;\n        break;\n      }\n      maybeEnd = (ch == \"*\");\n    }\n    return \"comment\";\n  }\n\n  function tokenString(quote) {\n    return function(stream, state) {\n      var escaped = false, ch;\n      while ((ch = stream.next()) != null) {\n        if (ch == quote && !escaped)\n          break;\n        escaped = !escaped && ch == \"\\\\\";\n      }\n      if (!escaped) state.tokenize = tokenBase;\n      return \"string\";\n    };\n  }\n\n  return {\n    startState: function(base) {\n      return {tokenize: tokenBase,\n              baseIndent: base || 0,\n              _indent: []};\n    },\n\n    token: function(stream, state) {\n      if (stream.eatSpace())\n        return null;\n\n      return (state.tokenize || tokenBase)(stream, state);\n    },\n\n    indent: function(state, _textAfter) {\n      var length = state._indent.length;\n      if (_textAfter && (_textAfter[0] == \"}\"))\n        length--;\n\n      if (length <0)\n        length = 0;\n\n      return length * indentUnit;\n    },\n\n    electricChars: \"}\"\n  };\n});\n\nCodeMirror.defineMIME(\"application/sieve\", \"sieve\");\n\n});\n"]}