/******************************************************************************
* Copyright (C) 2012-2013 Jonah Graham and others
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Jonah Graham <jonah@kichwacoders.com> - initial API and implementation
* Fabio Zadrozny <fabiofz@gmail.com> - ongoing maintenance
******************************************************************************/
package org.python.pydev.shared_interactive_console.console.codegen;
import java.io.File;
import org.eclipse.ui.ide.ResourceUtil;
import org.python.pydev.shared_core.string.FastStringBuffer;
import org.python.pydev.shared_core.string.StringUtils;
/**
* A collection of utilities to help create snippets of Python Code
*/
public final class PythonSnippetUtils {
/**
* Creates a "runfile" command for the argument file, escaping the name
* file as needed.
*
* @param file
* file to runfile
* @return Python snippet
*/
public static String getRunfileCommand(File file) {
return StringUtils.format("runfile(%s)\n", getSingleQuotedString(file.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;
}
}