diff --git a/lib/ace/editor.js b/lib/ace/editor.js index ef9b0e8a..a32ff85e 100644 --- a/lib/ace/editor.js +++ b/lib/ace/editor.js @@ -412,6 +412,11 @@ var Editor =function(renderer, session) { var mode = session.getMode(); var cursor = this.getCursorPosition(); + var transform = mode.transformInput(session.getState(cursor.row), this, session, text); + + if (transform) + text = transform.text; + text = text.replace("\t", this.session.getTabString()); // remove selected text @@ -427,12 +432,19 @@ var Editor =function(renderer, session) { this.clearSelection(); + var start = cursor.column; var lineState = session.getState(cursor.row); var shouldOutdent = mode.checkOutdent(lineState, session.getLine(cursor.row), text); var line = session.getLine(cursor.row); var lineIndent = mode.getNextLineIndent(lineState, line.slice(0, cursor.column), session.getTabString()); var end = session.insert(cursor, text); - + + if (transform && transform.selection) { + this.selection.setSelectionRange( + new Range(cursor.row, start + transform.selection[0], + cursor.row, start + transform.selection[1])); + } + var lineState = session.getState(cursor.row); // TODO disabled multiline auto indent @@ -600,8 +612,13 @@ var Editor =function(renderer, session) { if (this.selection.isEmpty()) this.selection.selectLeft(); + + var session = this.session; + var selection = this.getSelectionRange(); + var state = session.getState(selection.start.row); + var range = session.getMode().transformRemove(state, this, session, selection); - this.session.remove(this.getSelectionRange()); + this.session.remove(range); this.clearSelection(); }; diff --git a/lib/ace/mode/text.js b/lib/ace/mode/text.js index d0a3e495..70a3739c 100644 --- a/lib/ace/mode/text.js +++ b/lib/ace/mode/text.js @@ -150,7 +150,7 @@ var Mode = function() { this.$modes[this.$embeds[i]] = new mapping[this.$embeds[i]](); } - var delegations = ['toggleCommentLines', 'getNextLineIndent', 'checkOutdent', 'autoOutdent']; + var delegations = ['toggleCommentLines', 'getNextLineIndent', 'checkOutdent', 'autoOutdent', 'transformInput', 'transformRemove']; for (var i = 0; i < delegations.length; i++) { (function(scope) { @@ -178,6 +178,14 @@ var Mode = function() { return defaultHandler ? defaultHandler.apply(this, args) : undefined; }; + + this.transformInput = function(state, editor, session, text) { + return false; + }; + + this.transformRemove = function(state, editor, session, range) { + return range; + }; }).call(Mode.prototype);