K2LL33D SHELL

 Apache/2.4.7 (Ubuntu)
 Linux sman1baleendah 3.13.0-24-generic #46-Ubuntu SMP Thu Apr 10 19:11:08 UTC 2014 x86_64
 uid=33(www-data) gid=33(www-data) groups=33(www-data)
 safemode : OFF
 MySQL: ON | Perl: ON | cURL: OFF | WGet: ON
  >  / usr / share / javascript / codemirror / mode / smalltalk /
server ip : 104.21.89.46

your ip : 172.69.17.38

H O M E


Filename/usr/share/javascript/codemirror/mode/smalltalk/smalltalk.js
Size3.37 kb
Permissionrw-r--r--
Ownerroot : root
Create time27-Apr-2025 10:12
Last modified26-Mar-2012 17:05
Last accessed06-Jul-2025 19:51
Actionsedit | rename | delete | download (gzip)
Viewtext | code | image
CodeMirror.defineMode('smalltalk', function(config, modeConfig) {

var specialChars = /[+\-/\\*~<>=@%|&?!.:;^]/;
var keywords = /true|false|nil|self|super|thisContext/;

var Context = function(tokenizer, parent) {
this.next = tokenizer;
this.parent = parent;
};

var Token = function(name, context, eos) {
this.name = name;
this.context = context;
this.eos = eos;
};

var State = function() {
this.context = new Context(next, null);
this.expectVariable = true;
this.indentation = 0;
this.userIndentationDelta = 0;
};

State.prototype.userIndent = function(indentation) {
this.userIndentationDelta = indentation > 0 ? (indentation / config.indentUnit - this.indentation) : 0;
};

var next = function(stream, context, state) {
var token = new Token(null, context, false);
var aChar = stream.next();

if (aChar === '"') {
token = nextComment(stream, new Context(nextComment, context));

} else if (aChar === '\'') {
token = nextString(stream, new Context(nextString, context));

} else if (aChar === '#') {
stream.eatWhile(/[^ .]/);
token.name = 'string-2';

} else if (aChar === '$') {
stream.eatWhile(/[^ ]/);
token.name = 'string-2';

} else if (aChar === '|' && state.expectVariable) {
token.context = new Context(nextTemporaries, context);

} else if (/[\[\]{}()]/.test(aChar)) {
token.name = 'bracket';
token.eos = /[\[{(]/.test(aChar);

if (aChar === '[') {
state.indentation++;
} else if (aChar === ']') {
state.indentation = Math.max(0, state.indentation - 1);
}

} else if (specialChars.test(aChar)) {
stream.eatWhile(specialChars);
token.name = 'operator';
token.eos = aChar !== ';'; // ; cascaded message expression

} else if (/\d/.test(aChar)) {
stream.eatWhile(/[\w\d]/);
token.name = 'number'

} else if (/[\w_]/.test(aChar)) {
stream.eatWhile(/[\w\d_]/);
token.name = state.expectVariable ? (keywords.test(stream.current()) ? 'keyword' : 'variable') : null;

} else {
token.eos = state.expectVariable;
}

return token;
};

var nextComment = function(stream, context) {
stream.eatWhile(/[^"]/);
return new Token('comment', stream.eat('"') ? context.parent : context, true);
};

var nextString = function(stream, context) {
stream.eatWhile(/[^']/);
return new Token('string', stream.eat('\'') ? context.parent : context, false);
};

var nextTemporaries = function(stream, context, state) {
var token = new Token(null, context, false);
var aChar = stream.next();

if (aChar === '|') {
token.context = context.parent;
token.eos = true;

} else {
stream.eatWhile(/[^|]/);
token.name = 'variable';
}

return token;
}

return {
startState: function() {
return new State;
},

token: function(stream, state) {
state.userIndent(stream.indentation());

if (stream.eatSpace()) {
return null;
}

var token = state.context.next(stream, state.context, state);
state.context = token.context;
state.expectVariable = token.eos;

state.lastToken = token;
return token.name;
},

blankLine: function(state) {
state.userIndent(0);
},

indent: function(state, textAfter) {
var i = state.context.next === next && textAfter && textAfter.charAt(0) === ']' ? -1 : state.userIndentationDelta;
return (state.indentation + i) * config.indentUnit;
},

electricChars: ']'
};

});

CodeMirror.defineMIME('text/x-stsrc', {name: 'smalltalk'});