2022년 4월 30일 토요일

[Java] how to embed JavaScript

Embed JavaScript (J2v8)

if( ((String)langCombo.getSelectedItem()).equalsIgnoreCase("javascript") ) {
    SwingUtilities.invokeLater(() -> {
        try {
            boolean useNodeJS = false;
            V8 v8;
            if( useNodeJS ) {
                NodeJS nodeJS = NodeJS.createNodeJS();
                v8 = nodeJS.getRuntime();
            } else {
                v8 = V8.createV8Runtime();
            }
            v8.registerJavaMethod(j8print, "write"); 
            v8.registerJavaMethod(j8println, "writeln"); 
            outputPrintLn("<START Javascript>");
            v8.executeObjectScript(textTab.getSelectedTextView().getText());
            outputPrintLn("<END Javascript>");
        } catch (Exception e) {
            e.printStackTrace();
            outputPrintLn("error\n" + e.getMessage());
        }  
    });
}  

JavaVoidCallback j8print = new JavaVoidCallback() {
  public void invoke(final V8Object receiver, final V8Array parameters) {
    if (parameters.length() > 0) {
      Object arg1 = parameters.get(0);
      outputPrint((String)arg1);
      if (arg1 instanceof Releasable) {
        ((Releasable) arg1).release();
      }
    }
  }
 };

JavaVoidCallback j8println = new JavaVoidCallback() {
    public void invoke(final V8Object receiver, final V8Array parameters) {
        if (parameters.length() > 0) {
            Object arg1 = parameters.get(0);
            outputPrintLn((String)arg1);
            if (arg1 instanceof Releasable) {
                ((Releasable) arg1).release();
            }
        }
    }
}; 

[Java] how to embed JRuby

Embed JRuby

if( ((String)langCombo.getSelectedItem()).equalsIgnoreCase("ruby") ) {
    SwingUtilities.invokeLater(() -> {
        try {
            if( rubyScript == null ) {
                rubyScript = new ScriptingContainer();
                rubyWriter = new StringWriter();
                rubyScript.setOutput(rubyWriter);
                rubyScript.runScriptlet("def write(text) print(text) end\n");
                rubyScript.runScriptlet("def writeln(text) print(text + \"\\n\") end\n");
            }
            outputPrintLn("<START Ruby>");
            rubyScript.runScriptlet(textTab.getSelectedTextView().getText());
            outputPrint(rubyWriter.toString());
            rubyWriter.getBuffer().setLength(0);
            rubyWriter.getBuffer().trimToSize();
            outputPrintLn("<END Ruby>");
        } catch (Exception e) {
            e.printStackTrace();
            outputPrintLn("error\n" + e.getMessage());
        } 
    });
}

[Java] how to embed Jython

Embed Jython

if( ((String)langCombo.getSelectedItem()).equalsIgnoreCase("python") ) {
    SwingUtilities.invokeLater(() -> {
        try {
            PythonInterpreter pythonScript;   
            System.setProperty("python.import.site","false");
            pythonScript = new PythonInterpreter();
            pythonScript.set("instance", this);
            pythonScript.exec("def write(text): instance.outputPrint(text)\n");
            pythonScript.exec("def writeln(text): instance.outputPrintLn(text)\n");
            outputPrintLn("<START Python>");
            pythonScript.exec(textTab.getSelectedTextView().getText());
            outputPrintLn("<END Python>");
        } catch (Exception e) {
            e.printStackTrace();
            outputPrintLn("error\n" + e.getMessage());
        }  
    });
}

[Java] how to embed Lua script

Embed Lua Script

if( ((String)langCombo.getSelectedItem()).equalsIgnoreCase("lua") ) {
    SwingUtilities.invokeLater(() -> {
        try {
            ScriptEngine luaScript; 
            luaScript = new ScriptEngineManager().getEngineByName("luaj");
            luaScript.put("write", new print());
            luaScript.put("writeln", new println());
            outputPrintLn("<START Lua>");
            luaScript.eval(textTab.getSelectedTextView().getText());
            outputPrintLn("<END Lua>");
        } catch (Exception e) {
            e.printStackTrace();
            outputPrintLn("error\n" + e.getMessage());
        }  
    });
}

public void outputPrint(String text) {
    SwingUtilities.invokeLater( () -> {
        output.append(text );
    });
}    

public void outputPrintLn(String text) {
    SwingUtilities.invokeLater( () -> {
        output.append(text + "\n");
    });
}
 
class print extends OneArgFunction {
    @Override
    public LuaValue call(LuaValue lv) {
        outputPrint(lv.checkstring().tojstring());
        return LuaValue.valueOf(0);
    }
}   
class println extends OneArgFunction {
    @Override
    public LuaValue call(LuaValue lv) {
        outputPrintLn(lv.checkstring().tojstring());
        return LuaValue.valueOf(0);
    }
}    

[Java] How to embed Bean Shell

Embed Bean Shell

if( ((String)langCombo.getSelectedItem()).equalsIgnoreCase("java") ) {
    SwingUtilities.invokeLater( () -> {
        try {
            bsh.Interpreter bshScript;
            bshScript = new bsh.Interpreter();
            bshScript.set("instance", this);
            bshScript.eval("void write(text) { instance.outputPrint(text); }");
            bshScript.eval("void writeln(text) { instance.outputPrintLn(text); }");
            outputPrintLn("<START Java>");
            bshScript.eval(textTab.getSelectedTextView().getText());
            outputPrintLn("<END Java>");
        } catch (Exception e) {
            e.printStackTrace();
            outputPrintLn("error\n" + e.getMessage());
        }   
    }); 
}