inspired by SunboX s PHP support and Fabian Jakobs - thanks!
This commit is contained in:
parent
920bdc40ae
commit
53a4f1eacb
5 changed files with 156 additions and 1 deletions
1
.c9settings.xml
Normal file
1
.c9settings.xml
Normal 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>
|
||||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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
95
lib/ace/mode/java.js
Normal 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;
|
||||
});
|
||||
46
lib/ace/mode/java_worker.js
Normal file
46
lib/ace/mode/java_worker.js
Normal 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);
|
||||
|
||||
});
|
||||
Loading…
Add table
Add a link
Reference in a new issue