1{"version":3,"sources":["../../node_modules/codemirror/mode/smalltalk/smalltalk.js"],"names":["mod","exports","module","require","define","amd","CodeMirror","defineMode","config","specialChars","keywords","Context","tokenizer","parent","this","next","Token","name","context","eos","State","expectVariable","indentation","userIndentationDelta","prototype","userIndent","indentUnit","stream","state","token","aChar","nextComment","nextString","peek","nextSymbol","eatWhile","nextTemporaries","test","Math","max","current","eat","startState","eatSpace","blankLine","indent","textAfter","i","charAt","electricChars","defineMIME"],"mappings":"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","file":"smalltalk.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('smalltalk', function(config) {\n\n  var specialChars = /[+\\-\\/\\\\*~<>=@%|&?!.,:;^]/;\n  var keywords = /true|false|nil|self|super|thisContext/;\n\n  var Context = function(tokenizer, parent) {\n    this.next = tokenizer;\n    this.parent = parent;\n  };\n\n  var Token = function(name, context, eos) {\n    this.name = name;\n    this.context = context;\n    this.eos = eos;\n  };\n\n  var State = function() {\n    this.context = new Context(next, null);\n    this.expectVariable = true;\n    this.indentation = 0;\n    this.userIndentationDelta = 0;\n  };\n\n  State.prototype.userIndent = function(indentation) {\n    this.userIndentationDelta = indentation > 0 ? (indentation / config.indentUnit - this.indentation) : 0;\n  };\n\n  var next = function(stream, context, state) {\n    var token = new Token(null, context, false);\n    var aChar = stream.next();\n\n    if (aChar === '\"') {\n      token = nextComment(stream, new Context(nextComment, context));\n\n    } else if (aChar === '\\'') {\n      token = nextString(stream, new Context(nextString, context));\n\n    } else if (aChar === '#') {\n      if (stream.peek() === '\\'') {\n        stream.next();\n        token = nextSymbol(stream, new Context(nextSymbol, context));\n      } else {\n        if (stream.eatWhile(/[^\\s.{}\\[\\]()]/))\n          token.name = 'string-2';\n        else\n          token.name = 'meta';\n      }\n\n    } else if (aChar === '$') {\n      if (stream.next() === '<') {\n        stream.eatWhile(/[^\\s>]/);\n        stream.next();\n      }\n      token.name = 'string-2';\n\n    } else if (aChar === '|' && state.expectVariable) {\n      token.context = new Context(nextTemporaries, context);\n\n    } else if (/[\\[\\]{}()]/.test(aChar)) {\n      token.name = 'bracket';\n      token.eos = /[\\[{(]/.test(aChar);\n\n      if (aChar === '[') {\n        state.indentation++;\n      } else if (aChar === ']') {\n        state.indentation = Math.max(0, state.indentation - 1);\n      }\n\n    } else if (specialChars.test(aChar)) {\n      stream.eatWhile(specialChars);\n      token.name = 'operator';\n      token.eos = aChar !== ';'; // ; cascaded message expression\n\n    } else if (/\\d/.test(aChar)) {\n      stream.eatWhile(/[\\w\\d]/);\n      token.name = 'number';\n\n    } else if (/[\\w_]/.test(aChar)) {\n      stream.eatWhile(/[\\w\\d_]/);\n      token.name = state.expectVariable ? (keywords.test(stream.current()) ? 'keyword' : 'variable') : null;\n\n    } else {\n      token.eos = state.expectVariable;\n    }\n\n    return token;\n  };\n\n  var nextComment = function(stream, context) {\n    stream.eatWhile(/[^\"]/);\n    return new Token('comment', stream.eat('\"') ? context.parent : context, true);\n  };\n\n  var nextString = function(stream, context) {\n    stream.eatWhile(/[^']/);\n    return new Token('string', stream.eat('\\'') ? context.parent : context, false);\n  };\n\n  var nextSymbol = function(stream, context) {\n    stream.eatWhile(/[^']/);\n    return new Token('string-2', stream.eat('\\'') ? context.parent : context, false);\n  };\n\n  var nextTemporaries = function(stream, context) {\n    var token = new Token(null, context, false);\n    var aChar = stream.next();\n\n    if (aChar === '|') {\n      token.context = context.parent;\n      token.eos = true;\n\n    } else {\n      stream.eatWhile(/[^|]/);\n      token.name = 'variable';\n    }\n\n    return token;\n  };\n\n  return {\n    startState: function() {\n      return new State;\n    },\n\n    token: function(stream, state) {\n      state.userIndent(stream.indentation());\n\n      if (stream.eatSpace()) {\n        return null;\n      }\n\n      var token = state.context.next(stream, state.context, state);\n      state.context = token.context;\n      state.expectVariable = token.eos;\n\n      return token.name;\n    },\n\n    blankLine: function(state) {\n      state.userIndent(0);\n    },\n\n    indent: function(state, textAfter) {\n      var i = state.context.next === next && textAfter && textAfter.charAt(0) === ']' ? -1 : state.userIndentationDelta;\n      return (state.indentation + i) * config.indentUnit;\n    },\n\n    electricChars: ']'\n  };\n\n});\n\nCodeMirror.defineMIME('text/x-stsrc', {name: 'smalltalk'});\n\n});\n"]}