package nars.lab.launcher;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
import nars.NAR;
/**
* Javascript NAR Runner
* @author me
*/
public class NARjs {
final static ScriptEngineManager factory = new ScriptEngineManager();
final ScriptEngine js = factory.getEngineByName("JavaScript");
public NARjs() throws Exception {
super();
js.eval("load('nashorn:mozilla_compat.js')");
js.eval("importPackage('java.lang')");
js.eval("importPackage('java.util')");
js.eval("importPackage('java.io')");
js.eval("importPackage('nars.core')");
js.eval("importPackage('nars.core.build')");
js.eval("importPackage('nars.io')");
js.eval("importPackage('nars.gui')");
js.eval("function newDefaultNAR() { var x = new NAR(new Default()); new TextOutput(x, System.out); return x; }");
}
public Object eval(String s) throws ScriptException {
return js.eval(s);
}
public static void printHelp() {
System.out.println("Help coming soon.");
}
public static void main(String[] args) throws Exception {
NARjs j = new NARjs();
System.out.println(NAR.VERSION + " Javascript Console - :h for help, :q to exit");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.print("> ");
String s;
while ((s = br.readLine())!=null) {
try {
if (s.equals(":q"))
break;
else if (s.startsWith(":h")) {
printHelp();
continue;
}
Object ret = j.eval(s);
if (ret != null) {
System.out.println(ret);
}
} catch (Exception e) {
System.out.println(e.getClass().getName() + " in parsing: " + e.getMessage());
} finally {
System.out.print("> ");
}
}
br.close();
System.exit(0);
}
}