diff --git a/.c9settings.xml b/.c9settings.xml
new file mode 100644
index 00000000..160c1757
--- /dev/null
+++ b/.c9settings.xml
@@ -0,0 +1 @@
+{"ext/editors/editors":{"parent":{"visible":2,"flex":1},"visible":2,"flex":1},"ext/tree/tree":{"parent":{"visible":2,"width":323},"visible":true,"flex":3,"state":"normal"},"ext/console/console":{"parent":{"visible":2,"height":"41"},"visible":false,"flex":1}}["folder[1]","folder[1]/file[3]","folder[1]/folder[2]","folder[1]/folder[2]/folder[1]","folder[1]/folder[2]/folder[1]/folder[4]","folder[1]/folder[2]/folder[1]/folder[4]/file[18]","folder[1]/folder[2]/folder[1]/folder[4]/file[2]","folder[1]/folder[2]/folder[1]/folder[4]/file[3]"]
\ No newline at end of file
diff --git a/demo/startup.js b/demo/startup.js
index c56a8dc6..cd929dfb 100644
--- a/demo/startup.js
+++ b/demo/startup.js
@@ -52,6 +52,7 @@ exports.launch = function(env) {
var XmlMode = require("ace/mode/xml").Mode;
var PythonMode = require("ace/mode/python").Mode;
var PhpMode = require("ace/mode/php").Mode;
+ var JavaMode = require("ace/mode/java").Mode;
var TextMode = require("ace/mode/text").Mode;
var UndoManager = require("ace/undomanager").UndoManager;
@@ -101,6 +102,10 @@ exports.launch = function(env) {
docs.php = new EditSession(document.getElementById("phptext").innerHTML);
docs.php.setMode(new PhpMode());
docs.php.setUndoManager(new UndoManager());
+
+ docs.java = new EditSession(document.getElementById("javatext").innerHTML);
+ docs.java.setMode(new JavaMode());
+ docs.java.setUndoManager(new UndoManager());
var container = document.getElementById("editor");
@@ -113,7 +118,8 @@ exports.launch = function(env) {
css: new CssMode(),
javascript: new JavaScriptMode(),
python: new PythonMode(),
- php: new PhpMode()
+ php: new PhpMode(),
+ java: new JavaMode()
};
function getMode() {
@@ -146,6 +152,9 @@ exports.launch = function(env) {
else if (mode instanceof PhpMode) {
modeEl.value = "php";
}
+ else if (mode instanceof JavaMode) {
+ modeEl.value = "java";
+ }
else {
modeEl.value = "text";
}
@@ -271,6 +280,8 @@ exports.launch = function(env) {
mode = "python";
} else if (/^.*\.php$/i.test(file.name)) {
mode = "php";
+ } else if (/^.*\.java$/i.test(file.name)) {
+ mode = "java";
}
env.editor.onTextInput(reader.result);
diff --git a/editor.html b/editor.html
index be7968b2..c003214e 100644
--- a/editor.html
+++ b/editor.html
@@ -19,6 +19,7 @@
+
@@ -72,6 +73,7 @@
+
diff --git a/lib/ace/mode/java.js b/lib/ace/mode/java.js
new file mode 100644
index 00000000..0d9d5fb3
--- /dev/null
+++ b/lib/ace/mode/java.js
@@ -0,0 +1,95 @@
+define(function(require, exports, module) {
+
+var oop = require("pilot/oop");
+var TextMode = require("ace/mode/text").Mode;
+var Tokenizer = require("ace/tokenizer").Tokenizer;
+var JavaHighlightRules = require("ace/mode/java_highlight_rules").JavaHighlightRules;
+var MatchingBraceOutdent = require("ace/mode/matching_brace_outdent").MatchingBraceOutdent;
+var Range = require("ace/range").Range;
+var WorkerClient = require("ace/worker/worker_client").WorkerClient;
+
+var Mode = function() {
+ this.$tokenizer = new Tokenizer(new JavaHighlightRules().getRules());
+ this.$outdent = new MatchingBraceOutdent();
+};
+oop.inherits(Mode, TextMode);
+
+(function() {
+
+ this.toggleCommentLines = function(state, doc, startRow, endRow) {
+ var outdent = true;
+ var outentedRows = [];
+ var re = /^(\s*)\/\//;
+
+ for (var i=startRow; i<= endRow; i++) {
+ if (!re.test(doc.getLine(i))) {
+ outdent = false;
+ break;
+ }
+ }
+
+ if (outdent) {
+ var deleteRange = new Range(0, 0, 0, 0);
+ for (var i=startRow; i<= endRow; i++)
+ {
+ var line = doc.getLine(i).replace(re, "$1");
+ deleteRange.start.row = i;
+ deleteRange.end.row = i;
+ deleteRange.end.column = line.length + 2;
+ doc.replace(deleteRange, line);
+ }
+ return -2;
+ }
+ else {
+ return doc.indentRows(startRow, endRow, "//");
+ }
+ };
+
+ this.getNextLineIndent = function(state, line, tab) {
+ var indent = this.$getIndent(line);
+
+ var tokenizedLine = this.$tokenizer.getLineTokens(line, state);
+ var tokens = tokenizedLine.tokens;
+ var endState = tokenizedLine.state;
+
+ if (tokens.length && tokens[tokens.length-1].type == "comment") {
+ return indent;
+ }
+
+ if (state == "start") {
+ var match = line.match(/^.*[\{\(\[]\s*$/);
+ if (match) {
+ indent += tab;
+ }
+ } else if (state == "doc-start") {
+ if (endState == "start") {
+ return "";
+ }
+ var match = line.match(/^\s*(\/?)\*/);
+ if (match) {
+ if (match[1]) {
+ indent += " ";
+ }
+ indent += "* ";
+ }
+ }
+
+ return indent;
+ };
+
+ this.checkOutdent = function(state, line, input) {
+ return this.$outdent.checkOutdent(line, input);
+ };
+
+ this.autoOutdent = function(state, doc, row) {
+ return this.$outdent.autoOutdent(doc, row);
+ };
+
+ this.createWorker = function(session) {
+ return null;
+ };
+
+}).call(Mode.prototype);
+
+exports.Mode = Mode;
+});
diff --git a/lib/ace/mode/java_worker.js b/lib/ace/mode/java_worker.js
new file mode 100644
index 00000000..c8ac4894
--- /dev/null
+++ b/lib/ace/mode/java_worker.js
@@ -0,0 +1,46 @@
+define(function(require, exports, module) {
+
+var oop = require("pilot/oop");
+var Mirror = require("ace/worker/mirror").Mirror;
+var lint = require("ace/worker/jslint").JSLINT;
+
+var JavaScriptWorker = exports.JavaScriptWorker = function(sender) {
+ Mirror.call(this, sender);
+ this.setTimeout(500);
+};
+
+oop.inherits(JavaScriptWorker, Mirror);
+
+(function() {
+
+ this.onUpdate = function() {
+ var value = this.doc.getValue();
+
+// var start = new Date();
+ var parser = require("ace/narcissus/jsparse");
+ try {
+ parser.parse(value);
+ } catch(e) {
+// console.log("narcissus")
+// console.log(e);
+ sender.emit("narcissus", {
+ row: e.lineno-1,
+ column: null, // TODO convert e.cursor
+ text: e.message,
+ type: "error"
+ });
+ return;
+ } finally {
+// console.log("parse time: " + (new Date() - start));
+ }
+
+// var start = new Date();
+// console.log("jslint")
+ lint(value, {undef: false, onevar: false, passfail: false});
+ this.sender.emit("jslint", lint.errors);
+// console.log("lint time: " + (new Date() - start));
+ }
+
+}).call(JavaScriptWorker.prototype);
+
+});
\ No newline at end of file
|