Add transformInput and transformRemove hooks into edit modes

This commit is contained in:
c-spencer 2011-05-21 16:58:45 +01:00
commit 0d9b5dd8b9
2 changed files with 28 additions and 3 deletions

View file

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