--- /dev/null
+define(function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+// defines the parent mode
+var TextMode = require("./text").Mode;
+var Tokenizer = require("../tokenizer").Tokenizer;
+var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
+var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;
+
+// defines the language specific highlighters and folding rules
+var NitHighlightRules = require("./nit_highlight_rules").NitHighlightRules;
+//var NitFoldMode = require("./folding/nit").NitFoldMode;
+
+var Mode = function() {
+ // set everything up
+ this.HighlightRules = NitHighlightRules;
+ this.$outdent = new MatchingBraceOutdent();
+ this.$behaviour = new CstyleBehaviour();
+ //this.foldingRules = new NitFoldMode();
+};
+oop.inherits(Mode, TextMode);
+
+(function() {
+ // configure comment start/end characters
+ this.lineCommentStart = "#";
+ //this.blockComment = {start: "/*", end: "*/"};
+
+ // special logic for indent/outdent.
+ // By default ace keeps indentation of previous line
+ this.getNextLineIndent = function(state, line, tab) {
+ var indent = this.$getIndent(line);
+
+ var tokenizedLine = this.getTokenizer().getLineTokens(line, state);
+ var tokens = tokenizedLine.tokens;
+
+ if (tokens.length && tokens[tokens.length-1].type == "comment") {
+ return indent;
+ }
+
+ if (state == "start") {
+ //var match = line.match(/^.*[\{\(\[]\s*$/);
+ var match = line.match(/(^class| class | if | else | else|do$)/);
+ if (match) {
+ indent += tab + tab;
+ }
+ }
+ return indent;
+ };
+ this.checkOutdent = function(state, line, input) {
+ return this.$outdent.checkOutdent(line, input);
+ };
+ this.autoOutdent = function(state, doc, row) {
+ this.$outdent.autoOutdent(doc, row);
+ };
+
+ // create worker for live syntax checking
+ this.createWorker = function(session) {
+ /*var worker = new WorkerClient(["ace"], "ace/mode/nit_worker", "NitWorker");
+ worker.attachToDocument(session.getDocument());
+ worker.on("errors", function(e) {
+ session.setAnnotations(e.data);
+ });
+ return worker;*/
+ return null;
+ };
+
+ this.$id = "ace/mode/nit";
+}).call(Mode.prototype);
+
+exports.Mode = Mode;
+});