package com.aptana.interactive_console.console.codegen;
import java.io.File;
import org.eclipse.ui.ide.ResourceUtil;
import com.aptana.shared_core.string.FastStringBuffer;
/**
* A collection of utilities to help create snippets of Python Code
*/
public final class PythonSnippetUtils {
/**
* Creates an "execfile" command for the argument file, escaping the name
* file as needed.
*
* @param file
* file to execfile
* @return Python snippet
*/
public static String getExecfileCommand(File file) {
String singleQuotedString = getSingleQuotedString(file.toString());
return new FastStringBuffer("execfile(", singleQuotedString.length() + 5).append(singleQuotedString)
.append(")\n").toString();
}
private static String getQuotedString(char quote, String string) {
// Implemented using SimpleRunner.getArgumentsAsStr as a starting point
if (string == null || string.length() == 0)
return "" + quote + quote;
FastStringBuffer buf = new FastStringBuffer();
buf.append(quote);
char[] characters = string.toCharArray();
for (int j = 0; j < characters.length; j++) {
char character = characters[j];
if (character == quote) {
buf.append('\\');
} else if (character == '\\') {
buf.append('\\');
}
buf.append(character);
}
buf.append(quote);
return buf.toString();
}
/**
* Returns a singly (') quoted string
*
* @param string
* to quote
* @return singly quote string
*/
public static String getSingleQuotedString(String string) {
return getQuotedString('\'', string);
}
/**
* Returns a doubly (") quoted string
*
* @param string
* to quote
* @return doubly quote string
*/
public static String getDoubleQuotedString(String string) {
return getQuotedString('\"', string);
}
/**
* Get a IScriptConsoleCodeGenerator adapted object for object
* @param object to adapt
* @return adapted object, or <code>null</code> if not adaptable
* @see IScriptConsoleCodeGenerator
*/
public static IScriptConsoleCodeGenerator getScriptConsoleCodeGeneratorAdapter(Object object) {
if (object == null) {
return null;
}
if (object instanceof IScriptConsoleCodeGenerator) {
return (IScriptConsoleCodeGenerator) object;
}
Object adaptedNode = ResourceUtil.getAdapter(object, IScriptConsoleCodeGenerator.class, true);
if (adaptedNode instanceof IScriptConsoleCodeGenerator) {
return (IScriptConsoleCodeGenerator) adaptedNode;
}
return null;
}
}