Add Java scripting engine (BeanShell)
This commit is contained in:
parent
1a7958ad39
commit
8c2532728a
BIN
lib/bsh-2.0b5.jar
Normal file
BIN
lib/bsh-2.0b5.jar
Normal file
Binary file not shown.
@ -35,6 +35,7 @@ endorsed.classpath=
|
|||||||
excludes=
|
excludes=
|
||||||
file.reference.autocomplete-2.5.4.jar=lib/autocomplete-2.5.4.jar
|
file.reference.autocomplete-2.5.4.jar=lib/autocomplete-2.5.4.jar
|
||||||
file.reference.beautyeye_lnf.jar=lib/beautyeye_lnf.jar
|
file.reference.beautyeye_lnf.jar=lib/beautyeye_lnf.jar
|
||||||
|
file.reference.bsh-2.0b5.jar=lib\\bsh-2.0b5.jar
|
||||||
file.reference.commons-codec-1.9.jar=lib/commons-codec-1.9.jar
|
file.reference.commons-codec-1.9.jar=lib/commons-codec-1.9.jar
|
||||||
file.reference.commons-logging-1.2.jar=lib/commons-logging-1.2.jar
|
file.reference.commons-logging-1.2.jar=lib/commons-logging-1.2.jar
|
||||||
file.reference.flamingo-6.3.jar=lib/flamingo-6.3.jar
|
file.reference.flamingo-6.3.jar=lib/flamingo-6.3.jar
|
||||||
@ -90,7 +91,8 @@ javac.classpath=\
|
|||||||
${file.reference.httpmime-4.5.jar}:\
|
${file.reference.httpmime-4.5.jar}:\
|
||||||
${file.reference.jna-4.1.0.jar}:\
|
${file.reference.jna-4.1.0.jar}:\
|
||||||
${file.reference.jna-platform-4.1.0.jar}:\
|
${file.reference.jna-platform-4.1.0.jar}:\
|
||||||
${file.reference.jython-standalone-2.7.0.jar}
|
${file.reference.jython-standalone-2.7.0.jar}:\
|
||||||
|
${file.reference.bsh-2.0b5.jar}
|
||||||
# Space-separated list of extra javac options
|
# Space-separated list of extra javac options
|
||||||
javac.compilerargs=
|
javac.compilerargs=
|
||||||
javac.deprecation=false
|
javac.deprecation=false
|
||||||
|
@ -92,7 +92,7 @@ public class CodeRunner {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public CodeRunner(int lang) {
|
public CodeRunner(int lang) {
|
||||||
this(lang == 0 ? "js" : "py");
|
this(lang == 0 ? "js" : (lang == 2 ? "ja" : "py"));
|
||||||
}
|
}
|
||||||
|
|
||||||
public CodeRunner(String lang) {
|
public CodeRunner(String lang) {
|
||||||
@ -137,6 +137,26 @@ public class CodeRunner {
|
|||||||
initError(ex);
|
initError(ex);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case "java":
|
||||||
|
case "ja":
|
||||||
|
case "beanshell":
|
||||||
|
case "bsh":
|
||||||
|
scriptLang = "java";
|
||||||
|
se = new ScriptEngineManager().getEngineByName("java");
|
||||||
|
try {
|
||||||
|
// Add custom functions.
|
||||||
|
/*se.eval("importClass(net.apocalypselabs.symat.Functions);"
|
||||||
|
+ "SyMAT_Functions = new net.apocalypselabs.symat.Functions();"
|
||||||
|
+ "SyMAT_Functions.setLang('js');\n"
|
||||||
|
+ getFunctions("js")
|
||||||
|
+ loadToolkits());*/
|
||||||
|
// Allow engine access from scripts.
|
||||||
|
se.put("engine", se);
|
||||||
|
attachWriters();
|
||||||
|
} catch (Exception ex) {
|
||||||
|
initError(ex);
|
||||||
|
}
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
throw new UnsupportedOperationException("Script language " + lang + " not supported.");
|
throw new UnsupportedOperationException("Script language " + lang + " not supported.");
|
||||||
}
|
}
|
||||||
@ -298,6 +318,7 @@ public class CodeRunner {
|
|||||||
|
|
||||||
private String getFunctions(String lang) {
|
private String getFunctions(String lang) {
|
||||||
String text = "";
|
String text = "";
|
||||||
|
if (!lang.equals("java")) {
|
||||||
try {
|
try {
|
||||||
BufferedReader reader = new BufferedReader(
|
BufferedReader reader = new BufferedReader(
|
||||||
new InputStreamReader(
|
new InputStreamReader(
|
||||||
@ -311,4 +332,6 @@ public class CodeRunner {
|
|||||||
}
|
}
|
||||||
return text;
|
return text;
|
||||||
}
|
}
|
||||||
|
return "";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -274,6 +274,17 @@
|
|||||||
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="pythonOptionActionPerformed"/>
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="pythonOptionActionPerformed"/>
|
||||||
</Events>
|
</Events>
|
||||||
</MenuItem>
|
</MenuItem>
|
||||||
|
<MenuItem class="javax.swing.JRadioButtonMenuItem" name="javaOption">
|
||||||
|
<Properties>
|
||||||
|
<Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor">
|
||||||
|
<ComponentRef name="langBtnGroup"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="text" type="java.lang.String" value="Java"/>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="javaOptionActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
</MenuItem>
|
||||||
</SubComponents>
|
</SubComponents>
|
||||||
</Menu>
|
</Menu>
|
||||||
</SubComponents>
|
</SubComponents>
|
||||||
|
@ -96,6 +96,10 @@ public class Editor extends javax.swing.JInternalFrame {
|
|||||||
private AutoCompletion jsac = new AutoCompletion(jscomp);
|
private AutoCompletion jsac = new AutoCompletion(jscomp);
|
||||||
private AutoCompletion pyac = new AutoCompletion(pycomp);
|
private AutoCompletion pyac = new AutoCompletion(pycomp);
|
||||||
|
|
||||||
|
public static final int JAVASCRIPT = 1;
|
||||||
|
public static final int PYTHON = 2;
|
||||||
|
public static final int JAVA = 3;
|
||||||
|
|
||||||
private File filedata;
|
private File filedata;
|
||||||
|
|
||||||
private int font_size = 12;
|
private int font_size = 12;
|
||||||
@ -103,14 +107,26 @@ public class Editor extends javax.swing.JInternalFrame {
|
|||||||
/**
|
/**
|
||||||
* @param python If true sets to Python
|
* @param python If true sets to Python
|
||||||
*/
|
*/
|
||||||
|
@Deprecated
|
||||||
public Editor(boolean python) {
|
public Editor(boolean python) {
|
||||||
|
this((python ? PYTHON : JAVASCRIPT));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param lang Script language: 1 = javascript, 2 = python, 3 = java
|
||||||
|
*/
|
||||||
|
public Editor(int lang) {
|
||||||
initComponents();
|
initComponents();
|
||||||
|
|
||||||
FileFilter filter = new FileNameExtensionFilter("JavaScript (syjs, js)", "syjs", "js");
|
FileFilter filter = new FileNameExtensionFilter("All SyMAT Files", "syjs", "js", "sypy", "py", "syjava", "java");
|
||||||
fc.setFileFilter(filter);
|
fc.setFileFilter(filter);
|
||||||
fc.addChoosableFileFilter(filter);
|
fc.addChoosableFileFilter(filter);
|
||||||
|
fc.addChoosableFileFilter(new FileNameExtensionFilter(
|
||||||
|
"JavaScript (syjs, js)", "syjs", "js"));
|
||||||
fc.addChoosableFileFilter(new FileNameExtensionFilter(
|
fc.addChoosableFileFilter(new FileNameExtensionFilter(
|
||||||
"Python (sypy, py)", "sypy", "py"));
|
"Python (sypy, py)", "sypy", "py"));
|
||||||
|
fc.addChoosableFileFilter(new FileNameExtensionFilter(
|
||||||
|
"Java (syjava, java)", "syjava", "java"));
|
||||||
fc.addChoosableFileFilter(new FileNameExtensionFilter(
|
fc.addChoosableFileFilter(new FileNameExtensionFilter(
|
||||||
"Plain Text (txt, text)", "txt", "text"));
|
"Plain Text (txt, text)", "txt", "text"));
|
||||||
|
|
||||||
@ -136,39 +152,49 @@ public class Editor extends javax.swing.JInternalFrame {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
if (python) {
|
if (lang == PYTHON) {
|
||||||
pyac.install(codeBox);
|
pyac.install(codeBox);
|
||||||
javascriptOption.setSelected(false);
|
javascriptOption.setSelected(false);
|
||||||
pythonOption.setSelected(true);
|
pythonOption.setSelected(true);
|
||||||
codeBox.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_PYTHON);
|
codeBox.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_PYTHON);
|
||||||
|
} else if (lang == JAVA) {
|
||||||
|
codeBox.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_JAVA);
|
||||||
} else {
|
} else {
|
||||||
jsac.install(codeBox);
|
jsac.install(codeBox);
|
||||||
codeBox.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_JAVASCRIPT);
|
codeBox.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_JAVASCRIPT);
|
||||||
}
|
}
|
||||||
sp.setVisible(true);
|
|
||||||
codeBox.setVisible(true);
|
sp.setVisible(
|
||||||
|
true);
|
||||||
|
codeBox.setVisible(
|
||||||
|
true);
|
||||||
codeBox.requestFocus();
|
codeBox.requestFocus();
|
||||||
|
|
||||||
codeBox.getDocument().addDocumentListener(new DocumentListener() {
|
codeBox.getDocument()
|
||||||
|
.addDocumentListener(new DocumentListener() {
|
||||||
@Override
|
@Override
|
||||||
public void changedUpdate(DocumentEvent e) {
|
public void changedUpdate(DocumentEvent e
|
||||||
|
) {
|
||||||
changed();
|
changed();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void removeUpdate(DocumentEvent e) {
|
public void removeUpdate(DocumentEvent e
|
||||||
|
) {
|
||||||
changed();
|
changed();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void insertUpdate(DocumentEvent e) {
|
public void insertUpdate(DocumentEvent e
|
||||||
|
) {
|
||||||
changed();
|
changed();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void changed() {
|
public void changed() {
|
||||||
fileChanged = true;
|
fileChanged = true;
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -200,16 +226,18 @@ public class Editor extends javax.swing.JInternalFrame {
|
|||||||
*
|
*
|
||||||
* @param openfile Nothing to see here, move along.
|
* @param openfile Nothing to see here, move along.
|
||||||
*/
|
*/
|
||||||
public Editor(int openfile) {
|
public Editor(long openfile) {
|
||||||
this("");
|
this("");
|
||||||
openMenuActionPerformed(null);
|
openMenuActionPerformed(null);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setEditorTheme(String themeName) {
|
private void setEditorTheme(String themeName) {
|
||||||
try {
|
try {
|
||||||
Theme theme
|
Theme theme
|
||||||
= Theme.load(
|
= Theme.load(
|
||||||
Editor.class.
|
Editor.class
|
||||||
|
.
|
||||||
getResourceAsStream(
|
getResourceAsStream(
|
||||||
"resources/" + themeName + ".xml"),
|
"resources/" + themeName + ".xml"),
|
||||||
new Font(Font.MONOSPACED, Font.PLAIN, font_size));
|
new Font(Font.MONOSPACED, Font.PLAIN, font_size));
|
||||||
@ -273,6 +301,7 @@ public class Editor extends javax.swing.JInternalFrame {
|
|||||||
codeLangMenu = new javax.swing.JMenu();
|
codeLangMenu = new javax.swing.JMenu();
|
||||||
javascriptOption = new javax.swing.JRadioButtonMenuItem();
|
javascriptOption = new javax.swing.JRadioButtonMenuItem();
|
||||||
pythonOption = new javax.swing.JRadioButtonMenuItem();
|
pythonOption = new javax.swing.JRadioButtonMenuItem();
|
||||||
|
javaOption = new javax.swing.JRadioButtonMenuItem();
|
||||||
|
|
||||||
jMenuItem4.setText("jMenuItem4");
|
jMenuItem4.setText("jMenuItem4");
|
||||||
|
|
||||||
@ -546,6 +575,15 @@ public class Editor extends javax.swing.JInternalFrame {
|
|||||||
});
|
});
|
||||||
codeLangMenu.add(pythonOption);
|
codeLangMenu.add(pythonOption);
|
||||||
|
|
||||||
|
langBtnGroup.add(javaOption);
|
||||||
|
javaOption.setText("Java");
|
||||||
|
javaOption.addActionListener(new java.awt.event.ActionListener() {
|
||||||
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||||
|
javaOptionActionPerformed(evt);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
codeLangMenu.add(javaOption);
|
||||||
|
|
||||||
runMenu.add(codeLangMenu);
|
runMenu.add(codeLangMenu);
|
||||||
|
|
||||||
jMenuBar1.add(runMenu);
|
jMenuBar1.add(runMenu);
|
||||||
@ -571,10 +609,11 @@ public class Editor extends javax.swing.JInternalFrame {
|
|||||||
if (r == JFileChooser.APPROVE_OPTION) {
|
if (r == JFileChooser.APPROVE_OPTION) {
|
||||||
try {
|
try {
|
||||||
File f = fc.getSelectedFile();
|
File f = fc.getSelectedFile();
|
||||||
codeBox.setText(FileUtils.readFile(f.toString()));
|
/*codeBox.setText(FileUtils.readFile(f.toString()));
|
||||||
isSaved = true;
|
isSaved = true;
|
||||||
filedata = f;
|
filedata = f;*/
|
||||||
setTitle(f.getName());
|
openString(FileUtils.readFile(f.getAbsolutePath()),
|
||||||
|
f.getAbsolutePath(), true);
|
||||||
} catch (IOException ex) {
|
} catch (IOException ex) {
|
||||||
JOptionPane.showInternalMessageDialog(this,
|
JOptionPane.showInternalMessageDialog(this,
|
||||||
"Error: Cannot load file: " + ex.getMessage());
|
"Error: Cannot load file: " + ex.getMessage());
|
||||||
@ -612,15 +651,24 @@ public class Editor extends javax.swing.JInternalFrame {
|
|||||||
isSaved = saved;
|
isSaved = saved;
|
||||||
fileChanged = false;
|
fileChanged = false;
|
||||||
setTitle((new File(file)).getName());
|
setTitle((new File(file)).getName());
|
||||||
if (file.matches(".*\\.(js|mls|symt|syjs)")) {
|
if (file.matches(".*\\.(js|mls|symt|syjs)")) { // JavaScript
|
||||||
javascriptOption.setSelected(true);
|
javascriptOption.setSelected(true);
|
||||||
pythonOption.setSelected(false);
|
pythonOption.setSelected(false);
|
||||||
|
javaOption.setSelected(false);
|
||||||
codeBox.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_JAVASCRIPT);
|
codeBox.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_JAVASCRIPT);
|
||||||
pyac.uninstall();
|
pyac.uninstall();
|
||||||
jsac.install(codeBox);
|
jsac.install(codeBox);
|
||||||
} else if (file.matches(".*\\.(sypy|py)")) {
|
} else if (file.matches(".*\\.(syjava|java)")) { // Java
|
||||||
|
javascriptOption.setSelected(false);
|
||||||
|
pythonOption.setSelected(false);
|
||||||
|
javaOption.setSelected(true);
|
||||||
|
codeBox.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_JAVA);
|
||||||
|
//pyac.uninstall();
|
||||||
|
//jsac.install(codeBox);
|
||||||
|
} else if (file.matches(".*\\.(sypy|py)")) { // Python
|
||||||
javascriptOption.setSelected(false);
|
javascriptOption.setSelected(false);
|
||||||
pythonOption.setSelected(true);
|
pythonOption.setSelected(true);
|
||||||
|
javaOption.setSelected(false);
|
||||||
codeBox.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_PYTHON);
|
codeBox.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_PYTHON);
|
||||||
jsac.uninstall();
|
jsac.uninstall();
|
||||||
pyac.install(codeBox);
|
pyac.install(codeBox);
|
||||||
@ -673,6 +721,9 @@ public class Editor extends javax.swing.JInternalFrame {
|
|||||||
} else if (pythonOption.isSelected()) {
|
} else if (pythonOption.isSelected()) {
|
||||||
rt = new RunThread("python");
|
rt = new RunThread("python");
|
||||||
rt.start();
|
rt.start();
|
||||||
|
} else if (javaOption.isSelected()) {
|
||||||
|
rt = new RunThread("java");
|
||||||
|
rt.start();
|
||||||
}
|
}
|
||||||
}//GEN-LAST:event_runCodeBtnActionPerformed
|
}//GEN-LAST:event_runCodeBtnActionPerformed
|
||||||
|
|
||||||
@ -743,6 +794,7 @@ public class Editor extends javax.swing.JInternalFrame {
|
|||||||
uo.start();
|
uo.start();
|
||||||
cr.evalCode(script);
|
cr.evalCode(script);
|
||||||
uo.kill();
|
uo.kill();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private class UpdateOutput extends Thread {
|
private class UpdateOutput extends Thread {
|
||||||
@ -855,7 +907,7 @@ public class Editor extends javax.swing.JInternalFrame {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void exportMenuActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_exportMenuActionPerformed
|
private void exportMenuActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_exportMenuActionPerformed
|
||||||
String lang = pythonOption.isSelected() ? "python" : "js";
|
String lang = pythonOption.isSelected() ? "python" : (javaOption.isSelected() ? "java" : "js");
|
||||||
Main.loadFrame(new CodeExport(codeBox.getText(), lang, outputBox.getText()));
|
Main.loadFrame(new CodeExport(codeBox.getText(), lang, outputBox.getText()));
|
||||||
}//GEN-LAST:event_exportMenuActionPerformed
|
}//GEN-LAST:event_exportMenuActionPerformed
|
||||||
|
|
||||||
@ -928,7 +980,7 @@ public class Editor extends javax.swing.JInternalFrame {
|
|||||||
|
|
||||||
private void packPluginMenuActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_packPluginMenuActionPerformed
|
private void packPluginMenuActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_packPluginMenuActionPerformed
|
||||||
Main.loadFrame(new PackagePlugin(codeBox.getText(),
|
Main.loadFrame(new PackagePlugin(codeBox.getText(),
|
||||||
javascriptOption.isSelected() ? 0 : 1
|
javascriptOption.isSelected() ? 0 : pythonOption.isSelected() ? 1 : 2
|
||||||
));
|
));
|
||||||
}//GEN-LAST:event_packPluginMenuActionPerformed
|
}//GEN-LAST:event_packPluginMenuActionPerformed
|
||||||
|
|
||||||
@ -942,6 +994,12 @@ public class Editor extends javax.swing.JInternalFrame {
|
|||||||
+ "\n=============\n");
|
+ "\n=============\n");
|
||||||
}//GEN-LAST:event_killButtonActionPerformed
|
}//GEN-LAST:event_killButtonActionPerformed
|
||||||
|
|
||||||
|
private void javaOptionActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_javaOptionActionPerformed
|
||||||
|
codeBox.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_JAVA);
|
||||||
|
//pyac.uninstall();
|
||||||
|
//jsac.install(codeBox);
|
||||||
|
}//GEN-LAST:event_javaOptionActionPerformed
|
||||||
|
|
||||||
private void createShared(String id) {
|
private void createShared(String id) {
|
||||||
try {
|
try {
|
||||||
String padid = Pads.genPad(id, codeBox.getText());
|
String padid = Pads.genPad(id, codeBox.getText());
|
||||||
@ -972,6 +1030,7 @@ public class Editor extends javax.swing.JInternalFrame {
|
|||||||
ext = "py";
|
ext = "py";
|
||||||
}
|
}
|
||||||
String text = "";
|
String text = "";
|
||||||
|
|
||||||
try {
|
try {
|
||||||
BufferedReader reader = new BufferedReader(
|
BufferedReader reader = new BufferedReader(
|
||||||
new InputStreamReader(
|
new InputStreamReader(
|
||||||
@ -1030,6 +1089,7 @@ public class Editor extends javax.swing.JInternalFrame {
|
|||||||
private javax.swing.JScrollPane jScrollPane1;
|
private javax.swing.JScrollPane jScrollPane1;
|
||||||
private javax.swing.JPopupMenu.Separator jSeparator1;
|
private javax.swing.JPopupMenu.Separator jSeparator1;
|
||||||
private javax.swing.JSplitPane jSplitPane1;
|
private javax.swing.JSplitPane jSplitPane1;
|
||||||
|
private javax.swing.JRadioButtonMenuItem javaOption;
|
||||||
private javax.swing.JRadioButtonMenuItem javascriptOption;
|
private javax.swing.JRadioButtonMenuItem javascriptOption;
|
||||||
private javax.swing.JMenuItem killButton;
|
private javax.swing.JMenuItem killButton;
|
||||||
private javax.swing.ButtonGroup langBtnGroup;
|
private javax.swing.ButtonGroup langBtnGroup;
|
||||||
|
@ -62,6 +62,7 @@ import javax.swing.JOptionPane;
|
|||||||
import javax.swing.filechooser.FileNameExtensionFilter;
|
import javax.swing.filechooser.FileNameExtensionFilter;
|
||||||
import net.apocalypselabs.symat.plugin.LoadPlugin;
|
import net.apocalypselabs.symat.plugin.LoadPlugin;
|
||||||
import net.apocalypselabs.symat.plugin.Plugin;
|
import net.apocalypselabs.symat.plugin.Plugin;
|
||||||
|
import net.apocalypselabs.symat.plugin.PluginParent;
|
||||||
import org.python.google.common.io.Files;
|
import org.python.google.common.io.Files;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -72,6 +72,17 @@
|
|||||||
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="pythonMenuActionPerformed"/>
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="pythonMenuActionPerformed"/>
|
||||||
</Events>
|
</Events>
|
||||||
</MenuItem>
|
</MenuItem>
|
||||||
|
<MenuItem class="javax.swing.JRadioButtonMenuItem" name="javaMenu">
|
||||||
|
<Properties>
|
||||||
|
<Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor">
|
||||||
|
<ComponentRef name="langGroup"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="text" type="java.lang.String" value="Java"/>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="javaMenuActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
</MenuItem>
|
||||||
</SubComponents>
|
</SubComponents>
|
||||||
</Menu>
|
</Menu>
|
||||||
<MenuItem class="javax.swing.JMenuItem" name="setDefaultLang">
|
<MenuItem class="javax.swing.JMenuItem" name="setDefaultLang">
|
||||||
|
@ -115,8 +115,14 @@ public class Interpreter extends javax.swing.JInternalFrame {
|
|||||||
if (lang.equals("python")) {
|
if (lang.equals("python")) {
|
||||||
javascriptMenu.setSelected(false);
|
javascriptMenu.setSelected(false);
|
||||||
pythonMenu.setSelected(true);
|
pythonMenu.setSelected(true);
|
||||||
|
javaMenu.setSelected(false);
|
||||||
pyac.install(inputBox);
|
pyac.install(inputBox);
|
||||||
setTitle("Shell [python]");
|
setTitle("Shell [python]");
|
||||||
|
} else if (lang.equals("java")) {
|
||||||
|
setTitle("Shell [java]");
|
||||||
|
javascriptMenu.setSelected(false);
|
||||||
|
pythonMenu.setSelected(false);
|
||||||
|
javaMenu.setSelected(true);
|
||||||
} else {
|
} else {
|
||||||
jsac.install(inputBox);
|
jsac.install(inputBox);
|
||||||
setTitle("Shell [javascript]");
|
setTitle("Shell [javascript]");
|
||||||
@ -167,6 +173,7 @@ public class Interpreter extends javax.swing.JInternalFrame {
|
|||||||
jMenu1 = new javax.swing.JMenu();
|
jMenu1 = new javax.swing.JMenu();
|
||||||
javascriptMenu = new javax.swing.JRadioButtonMenuItem();
|
javascriptMenu = new javax.swing.JRadioButtonMenuItem();
|
||||||
pythonMenu = new javax.swing.JRadioButtonMenuItem();
|
pythonMenu = new javax.swing.JRadioButtonMenuItem();
|
||||||
|
javaMenu = new javax.swing.JRadioButtonMenuItem();
|
||||||
setDefaultLang = new javax.swing.JMenuItem();
|
setDefaultLang = new javax.swing.JMenuItem();
|
||||||
|
|
||||||
setClosable(true);
|
setClosable(true);
|
||||||
@ -279,6 +286,15 @@ public class Interpreter extends javax.swing.JInternalFrame {
|
|||||||
});
|
});
|
||||||
jMenu1.add(pythonMenu);
|
jMenu1.add(pythonMenu);
|
||||||
|
|
||||||
|
langGroup.add(javaMenu);
|
||||||
|
javaMenu.setText("Java");
|
||||||
|
javaMenu.addActionListener(new java.awt.event.ActionListener() {
|
||||||
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||||
|
javaMenuActionPerformed(evt);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
jMenu1.add(javaMenu);
|
||||||
|
|
||||||
langMenu.add(jMenu1);
|
langMenu.add(jMenu1);
|
||||||
|
|
||||||
setDefaultLang.setText("Set as default");
|
setDefaultLang.setText("Set as default");
|
||||||
@ -407,6 +423,8 @@ public class Interpreter extends javax.swing.JInternalFrame {
|
|||||||
FileFilter filter;
|
FileFilter filter;
|
||||||
if (javascriptMenu.isSelected()) {
|
if (javascriptMenu.isSelected()) {
|
||||||
filter = new FileNameExtensionFilter("SyMAT JavaScript (.syjs)", "syjs");
|
filter = new FileNameExtensionFilter("SyMAT JavaScript (.syjs)", "syjs");
|
||||||
|
} else if (javaMenu.isSelected()) {
|
||||||
|
filter = new FileNameExtensionFilter("SyMAT Java (.syjava)", "syjava");
|
||||||
} else {
|
} else {
|
||||||
filter = new FileNameExtensionFilter("SyMAT Python (.sypy)", "sypy");
|
filter = new FileNameExtensionFilter("SyMAT Python (.sypy)", "sypy");
|
||||||
}
|
}
|
||||||
@ -436,6 +454,13 @@ public class Interpreter extends javax.swing.JInternalFrame {
|
|||||||
inputBox.requestFocusInWindow();
|
inputBox.requestFocusInWindow();
|
||||||
}//GEN-LAST:event_formFocusGained
|
}//GEN-LAST:event_formFocusGained
|
||||||
|
|
||||||
|
private void javaMenuActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_javaMenuActionPerformed
|
||||||
|
if (!lang.equals("java")) {
|
||||||
|
Main.loadFrame(new Interpreter("java"));
|
||||||
|
dispose();
|
||||||
|
}
|
||||||
|
}//GEN-LAST:event_javaMenuActionPerformed
|
||||||
|
|
||||||
private void doRunCode() {
|
private void doRunCode() {
|
||||||
String code = inputBox.getText();
|
String code = inputBox.getText();
|
||||||
commandsForExport += code + "\n";
|
commandsForExport += code + "\n";
|
||||||
@ -551,6 +576,7 @@ public class Interpreter extends javax.swing.JInternalFrame {
|
|||||||
private javax.swing.JMenu jMenu4;
|
private javax.swing.JMenu jMenu4;
|
||||||
private javax.swing.JMenuBar jMenuBar1;
|
private javax.swing.JMenuBar jMenuBar1;
|
||||||
private javax.swing.JScrollPane jScrollPane1;
|
private javax.swing.JScrollPane jScrollPane1;
|
||||||
|
private javax.swing.JRadioButtonMenuItem javaMenu;
|
||||||
private javax.swing.JRadioButtonMenuItem javascriptMenu;
|
private javax.swing.JRadioButtonMenuItem javascriptMenu;
|
||||||
private javax.swing.ButtonGroup langGroup;
|
private javax.swing.ButtonGroup langGroup;
|
||||||
private javax.swing.JMenu langMenu;
|
private javax.swing.JMenu langMenu;
|
||||||
|
@ -55,7 +55,6 @@
|
|||||||
*/
|
*/
|
||||||
package net.apocalypselabs.symat;
|
package net.apocalypselabs.symat;
|
||||||
|
|
||||||
import java.awt.Color;
|
|
||||||
import java.awt.Dimension;
|
import java.awt.Dimension;
|
||||||
import java.awt.Font;
|
import java.awt.Font;
|
||||||
import java.awt.FontFormatException;
|
import java.awt.FontFormatException;
|
||||||
@ -64,7 +63,6 @@ import java.awt.Graphics;
|
|||||||
import java.awt.Image;
|
import java.awt.Image;
|
||||||
import java.awt.event.ActionEvent;
|
import java.awt.event.ActionEvent;
|
||||||
import java.awt.event.ActionListener;
|
import java.awt.event.ActionListener;
|
||||||
import java.awt.event.WindowAdapter;
|
|
||||||
import java.awt.event.WindowEvent;
|
import java.awt.event.WindowEvent;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FilenameFilter;
|
import java.io.FilenameFilter;
|
||||||
@ -108,7 +106,7 @@ public class Main extends JRibbonFrame {
|
|||||||
/**
|
/**
|
||||||
* Version name, as it should be displayed.
|
* Version name, as it should be displayed.
|
||||||
*/
|
*/
|
||||||
public static final String VERSION_NAME = "2.0.2";
|
public static final String VERSION_NAME = "2.1";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The word "SyMAT".
|
* The word "SyMAT".
|
||||||
@ -121,7 +119,7 @@ public class Main extends JRibbonFrame {
|
|||||||
/**
|
/**
|
||||||
* Version number, for updates and //needs in scripts
|
* Version number, for updates and //needs in scripts
|
||||||
*/
|
*/
|
||||||
public static final double APP_CODE = 23;
|
public static final double APP_CODE = 24;
|
||||||
/**
|
/**
|
||||||
* Base URL for building API calls
|
* Base URL for building API calls
|
||||||
*/
|
*/
|
||||||
@ -133,7 +131,7 @@ public class Main extends JRibbonFrame {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Ubuntu font. Loaded from Ubuntu-R.ttf in the default package at runtime.
|
* Ubuntu font. Loaded from Ubuntu-R.ttf in the default package at runtime.
|
||||||
* May become default sans-serif if something bad happens.
|
* Becomes default sans-serif if something bad happens.
|
||||||
*/
|
*/
|
||||||
public static Font ubuntuRegular;
|
public static Font ubuntuRegular;
|
||||||
public static boolean skipPython = false; // Skip python init on start?
|
public static boolean skipPython = false; // Skip python init on start?
|
||||||
|
@ -338,9 +338,10 @@
|
|||||||
<Component class="javax.swing.JComboBox" name="langSelect">
|
<Component class="javax.swing.JComboBox" name="langSelect">
|
||||||
<Properties>
|
<Properties>
|
||||||
<Property name="model" type="javax.swing.ComboBoxModel" editor="org.netbeans.modules.form.editors2.ComboBoxModelEditor">
|
<Property name="model" type="javax.swing.ComboBoxModel" editor="org.netbeans.modules.form.editors2.ComboBoxModelEditor">
|
||||||
<StringArray count="2">
|
<StringArray count="3">
|
||||||
<StringItem index="0" value="JavaScript"/>
|
<StringItem index="0" value="JavaScript"/>
|
||||||
<StringItem index="1" value="Python"/>
|
<StringItem index="1" value="Python"/>
|
||||||
|
<StringItem index="2" value="Java"/>
|
||||||
</StringArray>
|
</StringArray>
|
||||||
</Property>
|
</Property>
|
||||||
</Properties>
|
</Properties>
|
||||||
|
@ -293,7 +293,7 @@ public class PackagePlugin extends javax.swing.JInternalFrame {
|
|||||||
|
|
||||||
jLabel8.setText("Language:");
|
jLabel8.setText("Language:");
|
||||||
|
|
||||||
langSelect.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "JavaScript", "Python" }));
|
langSelect.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "JavaScript", "Python", "Java" }));
|
||||||
|
|
||||||
codeBox.setColumns(20);
|
codeBox.setColumns(20);
|
||||||
codeBox.setRows(5);
|
codeBox.setRows(5);
|
||||||
|
@ -55,7 +55,6 @@
|
|||||||
*/
|
*/
|
||||||
package net.apocalypselabs.symat;
|
package net.apocalypselabs.symat;
|
||||||
|
|
||||||
import java.awt.Color;
|
|
||||||
import java.io.BufferedReader;
|
import java.io.BufferedReader;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
|
@ -774,7 +774,7 @@ The code released under the CDDL shall be governed by the laws of the State of C
|
|||||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.<br>
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.<br>
|
||||||
</p><br>
|
</p><br>
|
||||||
<br>
|
<br>
|
||||||
<p><b>iTextPDF, Symja (core):</b></p>
|
<p><b>iTextPDF, Symja (core), BeanShell:</b></p>
|
||||||
<p> GNU LESSER GENERAL PUBLIC LICENSE<br>
|
<p> GNU LESSER GENERAL PUBLIC LICENSE<br>
|
||||||
Version 3, 29 June 2007<br>
|
Version 3, 29 June 2007<br>
|
||||||
<br>
|
<br>
|
||||||
|
@ -62,9 +62,9 @@ import java.io.File;
|
|||||||
import java.io.FileInputStream;
|
import java.io.FileInputStream;
|
||||||
import java.io.FileNotFoundException;
|
import java.io.FileNotFoundException;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.io.InvalidClassException;
|
||||||
import java.io.ObjectInputStream;
|
import java.io.ObjectInputStream;
|
||||||
import net.apocalypselabs.symat.CodeRunner;
|
import net.apocalypselabs.symat.CodeRunner;
|
||||||
import net.apocalypselabs.symat.Debug;
|
|
||||||
import net.apocalypselabs.symat.Main;
|
import net.apocalypselabs.symat.Main;
|
||||||
import org.pushingpixels.flamingo.api.common.JCommandButton;
|
import org.pushingpixels.flamingo.api.common.JCommandButton;
|
||||||
import org.pushingpixels.flamingo.api.common.JCommandToggleButton;
|
import org.pushingpixels.flamingo.api.common.JCommandToggleButton;
|
||||||
@ -79,9 +79,9 @@ import org.pushingpixels.flamingo.api.common.icon.ResizableIcon;
|
|||||||
*/
|
*/
|
||||||
public class LoadPlugin {
|
public class LoadPlugin {
|
||||||
|
|
||||||
private Plugin p = new Plugin();
|
private Plugin p;
|
||||||
|
|
||||||
public LoadPlugin(File f) throws FileNotFoundException, IOException, ClassNotFoundException {
|
public LoadPlugin(File f) throws FileNotFoundException, IOException, ClassNotFoundException, InvalidClassException {
|
||||||
FileInputStream fin = new FileInputStream(f);
|
FileInputStream fin = new FileInputStream(f);
|
||||||
ObjectInputStream ois = new ObjectInputStream(fin);
|
ObjectInputStream ois = new ObjectInputStream(fin);
|
||||||
p = (Plugin) ois.readObject();
|
p = (Plugin) ois.readObject();
|
||||||
|
@ -61,12 +61,13 @@ import javax.swing.ImageIcon;
|
|||||||
/**
|
/**
|
||||||
* Plugin container class.
|
* Plugin container class.
|
||||||
*/
|
*/
|
||||||
public class Plugin implements Serializable {
|
public class Plugin extends PluginParent implements Serializable {
|
||||||
|
|
||||||
private static final long serialVersionUID = 13371L;
|
private static final long serialVersionUID = 13371L;
|
||||||
|
|
||||||
public final int LANG_JS = 0;
|
public final int LANG_JS = 0;
|
||||||
public final int LANG_PY = 1;
|
public final int LANG_PY = 1;
|
||||||
|
public final int LANG_JAVA = 2;
|
||||||
|
|
||||||
private ImageIcon icon;
|
private ImageIcon icon;
|
||||||
private String packageName = "";
|
private String packageName = "";
|
||||||
|
108
src/net/apocalypselabs/symat/plugin/PluginParent.java
Normal file
108
src/net/apocalypselabs/symat/plugin/PluginParent.java
Normal file
@ -0,0 +1,108 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2015, Netsyms Technologies
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* CODE LICENSE ==========
|
||||||
|
* Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
* are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
* list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
* other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* 3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
* may be used to endorse or promote products derived from this software without
|
||||||
|
* specific prior written permission.
|
||||||
|
*
|
||||||
|
* 4. You adhere to the Media License detailed below. If you do not, this license
|
||||||
|
* is automatically revoked and you must purge all copies of the software you
|
||||||
|
* possess, in source or binary form.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* MEDIA LICENSE ==========
|
||||||
|
* All images and other graphical files ("media") included with this
|
||||||
|
* software are copyright (c) 2015 Netsyms Technologies. You may not distribute
|
||||||
|
* the graphics or any program, source code repository, or other digital storage
|
||||||
|
* media containing them without permission from Netsyms Technologies.
|
||||||
|
* This ban on distribution only applies to publicly available systems.
|
||||||
|
* A password-protected network file share, USB drive, or other storage scheme that
|
||||||
|
* cannot be easily accessed by the public is generally allowed. If in doubt,
|
||||||
|
* contact Netsyms Technologies. If Netsyms Technologies allows or denies
|
||||||
|
* you permission, that decision is considered final and binding.
|
||||||
|
*
|
||||||
|
* You may only use the media for personal,
|
||||||
|
* non-commercial, non-educational use unless:
|
||||||
|
* 1, You have paid for the software and media via the SyMAT website,
|
||||||
|
* or 2, you are using it as part of the 15-day trial period.
|
||||||
|
* Other uses are prohibited without permission.
|
||||||
|
* If any part of this license is deemed unenforcable, the remainder
|
||||||
|
* of the license remains in full effect.
|
||||||
|
*/
|
||||||
|
package net.apocalypselabs.symat.plugin;
|
||||||
|
|
||||||
|
import javax.swing.ImageIcon;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Skylar
|
||||||
|
*/
|
||||||
|
public abstract class PluginParent {
|
||||||
|
|
||||||
|
public abstract String getVersion();
|
||||||
|
|
||||||
|
public abstract void setVersion(String v);
|
||||||
|
|
||||||
|
public abstract String getPackage();
|
||||||
|
|
||||||
|
public abstract void setPackage(String pkg);
|
||||||
|
|
||||||
|
public abstract String getAuthor();
|
||||||
|
|
||||||
|
public abstract void setAuthor(String s);
|
||||||
|
|
||||||
|
public abstract String getWebsite();
|
||||||
|
|
||||||
|
public abstract void setWebsite(String url);
|
||||||
|
|
||||||
|
public abstract String getOther();
|
||||||
|
|
||||||
|
public abstract void setOther(String o);
|
||||||
|
|
||||||
|
public abstract ImageIcon getIcon();
|
||||||
|
|
||||||
|
public abstract void setIcon(ImageIcon i);
|
||||||
|
|
||||||
|
public abstract String getScript();
|
||||||
|
|
||||||
|
public abstract void setScript(String s);
|
||||||
|
|
||||||
|
public abstract String getTitle();
|
||||||
|
|
||||||
|
public abstract void setTitle(String n);
|
||||||
|
|
||||||
|
public abstract String getDesc();
|
||||||
|
|
||||||
|
public abstract void setDesc(String d);
|
||||||
|
|
||||||
|
public abstract String getLongTitle();
|
||||||
|
|
||||||
|
public abstract void setLongTitle(String t);
|
||||||
|
|
||||||
|
public abstract int getLang();
|
||||||
|
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user