1 29 30 package com.caucho.quercus.script; 31 32 import com.caucho.quercus.Quercus; 33 import com.caucho.quercus.env.Env; 34 import com.caucho.quercus.page.InterpretedPage; 35 import com.caucho.quercus.page.QuercusPage; 36 import com.caucho.quercus.parser.QuercusParser; 37 import com.caucho.quercus.program.QuercusProgram; 38 import com.caucho.vfs.*; 39 40 import javax.script.*; 41 import java.io.Reader ; 42 import java.io.StringReader ; 43 import java.io.Writer ; 44 45 48 public class QuercusScriptEngine 49 extends AbstractScriptEngine 50 implements Compilable { 51 private QuercusScriptEngineFactory _factory; 52 private final Quercus _quercus; 53 54 QuercusScriptEngine(QuercusScriptEngineFactory factory) 55 { 56 _factory = factory; 57 _quercus = new Quercus(); 58 } 59 60 63 Quercus getQuercus() 64 { 65 return _quercus; 66 } 67 68 71 public Object eval(Reader script, ScriptContext cxt) 72 throws ScriptException 73 { 74 try { 75 QuercusProgram program = QuercusParser.parse(_quercus, null, script); 76 77 Writer writer = cxt.getWriter(); 78 79 WriteStream out; 80 81 if (writer != null) { 82 ReaderWriterStream s = new ReaderWriterStream(null, writer); 83 WriteStream os = new WriteStream(s); 84 85 try { 86 os.setEncoding("utf-8"); 87 } catch (Exception e) { 88 } 89 90 out = os; 91 } 92 else 93 out = new NullWriteStream(); 94 95 QuercusPage page = new InterpretedPage(program); 96 97 Env env = new Env(_quercus, page, out, null, null); 98 99 env.setScriptContext(cxt); 100 101 Object value = program.execute(env).toJavaObject(); 102 103 out.flushBuffer(); 104 out.free(); 105 106 return value; 107 108 112 } catch (RuntimeException e) { 113 throw e; 114 } catch (Exception e) { 115 throw new ScriptException(e); 116 } catch (Throwable e) { 117 throw new RuntimeException (e); 118 } 119 } 120 121 124 public Object eval(String script, ScriptContext cxt) 125 throws ScriptException 126 { 127 return eval(new StringReader (script), cxt); 128 } 129 130 133 public CompiledScript compile(Reader script) 134 throws ScriptException 135 { 136 try { 137 QuercusProgram program = QuercusParser.parse(_quercus, null, script); 138 139 return new QuercusCompiledScript(this, program); 140 } catch (RuntimeException e) { 141 throw e; 142 } catch (Exception e) { 143 throw new ScriptException(e); 144 } catch (Throwable e) { 145 throw new RuntimeException (e); 146 } 147 } 148 149 152 public CompiledScript compile(String script) 153 throws ScriptException 154 { 155 return compile(new StringReader (script)); 156 } 157 158 161 public QuercusScriptEngineFactory getFactory() 162 { 163 return _factory; 164 } 165 166 169 public Bindings createBindings() 170 { 171 return new SimpleBindings(); 172 } 173 174 public String toString() 175 { 176 return "QuercusScriptEngine[]"; 177 } 178 } 179 180 | Popular Tags |