/**
* Copyright (c) 2005-2011 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.python.pydev.debug.console;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.debug.ui.DebugUITools;
import org.python.pydev.debug.core.IConsoleInputListener;
import org.python.pydev.debug.model.AbstractDebugTarget;
import org.python.pydev.debug.model.PyStackFrame;
import org.python.pydev.debug.model.remote.EvaluateExpressionCommand;
public class EvaluationConsoleInputListener implements IConsoleInputListener {
private static final boolean DEBUG = false;
private StringBuffer buf = new StringBuffer();
public void newLineReceived(String lineReceived, AbstractDebugTarget target) {
boolean evaluateNow = !lineReceived.startsWith(" ") && !lineReceived.startsWith("\t")
&& !lineReceived.endsWith(":") && !lineReceived.endsWith("\\");
if (DEBUG) {
System.out.println("line: '" + lineReceived + "'");
}
buf.append(lineReceived);
if (lineReceived.length() > 0) {
buf.append("@LINE@");
}
if (evaluateNow) {
final String toEval = buf.toString();
if (toEval.trim().length() > 0) {
IAdaptable context = DebugUITools.getDebugContext();
if (DEBUG) {
System.out.println("Evaluating:\n" + toEval);
}
if (context instanceof PyStackFrame) {
target.postCommand(new EvaluateExpressionCommand(target, toEval, ((PyStackFrame) context)
.getLocalsLocator().getPyDBLocation(), true));
}
}
buf = new StringBuffer();
}
}
public void pasteReceived(String text, AbstractDebugTarget target) {
if (DEBUG) {
System.out.println("paste: '" + text + "'");
}
text = text.replaceAll("\r\n", "@LINE@").replaceAll("\r", "@LINE@").replaceAll("\n", "@LINE@");
buf.append(text);
buf.append("@LINE@");
}
}