/**
* Copyright (c) 2005-2012 by Appcelerator, Inc. All Rights Reserved.
* Licensed under the terms of the Eclipse Public License (EPL).
* Please see the license.txt included with this distribution for details.
* Any modifications to this file must keep this entire header intact.
*/
package com.aptana.interactive_console.console.ui.internal.actions;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.IDocument;
import com.aptana.shared_core.log.Log;
/**
* Deletes the previous word (ctrl+backspace)
*
* @author fabioz
*/
public class HandleDeletePreviousWord {
public void execute(IDocument doc, int caretPosition, int commandLineOffset) {
int initialCaretPosition = caretPosition;
//remove all whitespaces
while (caretPosition > commandLineOffset) {
try {
char c = doc.getChar(caretPosition - 1);
if (!Character.isWhitespace(c)) {
break;
}
caretPosition -= 1;
} catch (BadLocationException e) {
break;
}
}
//remove a word
while (caretPosition > commandLineOffset) {
try {
char c = doc.getChar(caretPosition - 1);
if (!Character.isJavaIdentifierPart(c)) {
break;
}
caretPosition -= 1;
} catch (BadLocationException e) {
break;
}
}
if (initialCaretPosition == caretPosition && initialCaretPosition > commandLineOffset) {
caretPosition = initialCaretPosition - 1;
}
try {
doc.replace(caretPosition, initialCaretPosition - caretPosition, "");
} catch (BadLocationException e) {
Log.log(e);
}
}
}