From 3a754133dbc138390503341fd2e9beba3e43aa4b Mon Sep 17 00:00:00 2001
From: Jose Antonio Marquez
Date: Fri, 27 Jan 2012 12:05:17 -0800
Subject: Merged old FileIO
---
imports/codemirror/mode/smalltalk/index.html | 55 ++++++++++
imports/codemirror/mode/smalltalk/smalltalk.js | 139 +++++++++++++++++++++++++
2 files changed, 194 insertions(+)
create mode 100755 imports/codemirror/mode/smalltalk/index.html
create mode 100755 imports/codemirror/mode/smalltalk/smalltalk.js
(limited to 'imports/codemirror/mode/smalltalk')
diff --git a/imports/codemirror/mode/smalltalk/index.html b/imports/codemirror/mode/smalltalk/index.html
new file mode 100755
index 00000000..8a85c39e
--- /dev/null
+++ b/imports/codemirror/mode/smalltalk/index.html
@@ -0,0 +1,55 @@
+
+
+
+ CodeMirror: Smalltalk mode
+
+
+
+
+
+
+
+ CodeMirror: Smalltalk mode
+
+
+
+
+
+ Simple Smalltalk mode.
+
+ MIME types defined: text/x-stsrc
.
+
+
diff --git a/imports/codemirror/mode/smalltalk/smalltalk.js b/imports/codemirror/mode/smalltalk/smalltalk.js
new file mode 100755
index 00000000..e002e666
--- /dev/null
+++ b/imports/codemirror/mode/smalltalk/smalltalk.js
@@ -0,0 +1,139 @@
+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 char = stream.next();
+
+ if (char === '"') {
+ token = nextComment(stream, new Context(nextComment, context));
+
+ } else if (char === '\'') {
+ token = nextString(stream, new Context(nextString, context));
+
+ } else if (char === '#') {
+ stream.eatWhile(/[^ .]/);
+ token.name = 'string-2';
+
+ } else if (char === '$') {
+ stream.eatWhile(/[^ ]/);
+ token.name = 'string-2';
+
+ } else if (char === '|' && state.expectVariable) {
+ token.context = new Context(nextTemporaries, context);
+
+ } else if (/[\[\]{}()]/.test(char)) {
+ token.name = 'bracket';
+ token.eos = /[\[{(]/.test(char);
+
+ if (char === '[') {
+ state.indentation++;
+ } else if (char === ']') {
+ state.indentation = Math.max(0, state.indentation - 1);
+ }
+
+ } else if (specialChars.test(char)) {
+ stream.eatWhile(specialChars);
+ token.name = 'operator';
+ token.eos = char !== ';'; // ; cascaded message expression
+
+ } else if (/\d/.test(char)) {
+ stream.eatWhile(/[\w\d]/);
+ token.name = 'number'
+
+ } else if (/[\w_]/.test(char)) {
+ 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 char = stream.next();
+
+ if (char === '|') {
+ 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'});
\ No newline at end of file
--
cgit v1.2.3