/*
* Scriptographer
*
* This file is part of Scriptographer, a Scripting Plugin for Adobe Illustrator
* http://scriptographer.org/
*
* Copyright (c) 2002-2010, Juerg Lehni
* http://scratchdisk.com/
*
* All rights reserved. See LICENSE file for details.
*
* File created on Mar 7, 2007.
*/
package com.scratchdisk.script.jython;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Map;
import org.python.core.CompileMode;
import org.python.core.Py;
import org.python.core.PyDictionary;
import org.python.core.PyException;
import org.python.core.PyObject;
import org.python.core.PySystemState;
import com.scratchdisk.script.ArgumentReader;
import com.scratchdisk.script.PropertyObserver;
import com.scratchdisk.script.Scope;
import com.scratchdisk.script.Script;
import com.scratchdisk.script.ScriptEngine;
import com.scratchdisk.script.ScriptException;
/**
* @author lehni
*
*/
public class JythonEngine extends ScriptEngine {
protected PyDictionary globals = new PyDictionary();
public JythonEngine() {
super("Python", "py");
PySystemState.initialize();
PySystemState state = new PySystemState();
state.setClassLoader(Thread.currentThread().getContextClassLoader());
Py.setSystemState(state);
}
protected Script compileScript(File file) throws ScriptException,
IOException {
InputStream in = null;
try {
in = new FileInputStream(file);
return new JythonScript(this,
Py.compile(in, file.getName(), CompileMode.exec), file);
} catch (PyException e) {
throw new JythonException(e);
} finally {
if (in != null)
in.close();
}
}
public Script compile(String code, String name) {
return null;
}
public Scope createScope() {
return new JythonScope();
}
public Scope getScope(Object object) {
return new JythonScope(Py.java2py(object));
}
public Scope getGlobalScope() {
return getScope(globals);
}
public <T> T toJava(Object object, Class<T> type) {
if (object instanceof PyObject)
return Py.tojava((PyObject) object, type);
return null;
}
@Override
public ArgumentReader getArgumentReader(Object object) {
return null;
}
@Override
public boolean observe(Map object, Object key, PropertyObserver observer) {
return false;
}
}