{"version":3,"file":"smalltalk-WUDknFHI.cjs","sources":["../../../node_modules/@codemirror/legacy-modes/mode/smalltalk.js"],"sourcesContent":["var specialChars = /[+\\-\\/\\\\*~<>=@%|&?!.,:;^]/;\nvar keywords = /true|false|nil|self|super|thisContext/;\n\nvar Context = function(tokenizer, parent) {\n  this.next = tokenizer;\n  this.parent = parent;\n};\n\nvar Token = function(name, context, eos) {\n  this.name = name;\n  this.context = context;\n  this.eos = eos;\n};\n\nvar State = function() {\n  this.context = new Context(next, null);\n  this.expectVariable = true;\n  this.indentation = 0;\n  this.userIndentationDelta = 0;\n};\n\nState.prototype.userIndent = function(indentation, indentUnit) {\n  this.userIndentationDelta = indentation > 0 ? (indentation / indentUnit - this.indentation) : 0;\n};\n\nvar 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.special';\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.special';\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\nvar nextComment = function(stream, context) {\n  stream.eatWhile(/[^\"]/);\n  return new Token('comment', stream.eat('\"') ? context.parent : context, true);\n};\n\nvar nextString = function(stream, context) {\n  stream.eatWhile(/[^']/);\n  return new Token('string', stream.eat('\\'') ? context.parent : context, false);\n};\n\nvar nextSymbol = function(stream, context) {\n  stream.eatWhile(/[^']/);\n  return new Token('string.special', stream.eat('\\'') ? context.parent : context, false);\n};\n\nvar 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\nexport const smalltalk = {\n  name: \"smalltalk\",\n\n  startState: function() {\n    return new State;\n  },\n\n  token: function(stream, state) {\n    state.userIndent(stream.indentation(), stream.indentUnit);\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, indentUnit) {\n    state.userIndent(0, indentUnit);\n  },\n\n  indent: function(state, textAfter, cx) {\n    var i = state.context.next === next && textAfter && textAfter.charAt(0) === ']' ? -1 : state.userIndentationDelta;\n    return (state.indentation + i) * cx.unit;\n  },\n\n  languageData: {\n    indentOnInput: /^\\s*\\]$/\n  }\n}\n"],"names":["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","smalltalk","startState","eatSpace","blankLine","indent","textAfter","cx","i","charAt","unit","languageData","indentOnInput"],"mappings":"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","x_google_ignoreList":[0]}