inspired by SunboX s PHP support and Fabian Jakobs - thanks!

This commit is contained in:
Tom Tasche 2011-01-31 18:23:41 +01:00
commit 53a4f1eacb
5 changed files with 156 additions and 1 deletions

1
.c9settings.xml Normal file
View file

@ -0,0 +1 @@
<settings version="0.0.2" ><auto><configurations /><panel>{"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}}</panel><tree>["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]"]</tree><files active="/tomtasche/ace/workspace/lib/ace/mode/java.js"><file path="/tomtasche/ace/workspace/lib/ace/mode/java.js" type="file" size="11" name="java.js" contenttype="application/javascript; charset=utf-8" creationdate="" lockable="false" hidden="false" executable="false" scriptname="/home/ide_tomtasche/workspaces/ace/lib/ace/mode/java.js"/><file path="/tomtasche/ace/workspace/lib/ace/mode/javascript.js" type="file" size="5785" name="javascript.js" contenttype="application/javascript; charset=utf-8" creationdate="" lockable="false" hidden="false" executable="false" scriptname="/home/ide_tomtasche/workspaces/ace/lib/ace/mode/javascript.js"/></files></auto><general name="General" page="pgSettingsGeneral" saveallbeforerun="true"/><editors name="Editor" page="pgSettingsEditors"><code name="Code Editor" overwrite="false" selectstyle="line" activeline="true" showinvisibles="false" showprintmargin="true" printmargincolumn="80" softtabs="true" tabsize="4" scrollspeed="2"/></editors></settings>

View file

@ -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);

View file

@ -19,6 +19,7 @@
<option value="css">CSS Document</option>
<option value="python">Python Document</option>
<option value="php">PHP Document</option>
<option value="java">Java Document</option>
<option value="plain">Text Document</option>
</select>
</td>
@ -72,6 +73,7 @@
<option value="css">CSS</option>
<option value="python">Python</option>
<option value="php">PHP</option>
<option value="java">Java</option>
</select>
</td>
<td align="right">

95
lib/ace/mode/java.js Normal file
View file

@ -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;
});

View file

@ -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);
});