{"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"]}