Add Java scripting engine (BeanShell)

master
Skylar Ittner 9 years ago
parent 1a7958ad39
commit 8c2532728a

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,17 +318,20 @@ public class CodeRunner {
private String getFunctions(String lang) { private String getFunctions(String lang) {
String text = ""; String text = "";
try { if (!lang.equals("java")) {
BufferedReader reader = new BufferedReader( try {
new InputStreamReader( BufferedReader reader = new BufferedReader(
CodeRunner.class new InputStreamReader(
.getResourceAsStream("functions." + lang))); CodeRunner.class
String line; .getResourceAsStream("functions." + lang)));
while ((line = reader.readLine()) != null) { String line;
text += line + "\n"; while ((line = reader.readLine()) != null) {
text += line + "\n";
}
} catch (Exception e) {
} }
} catch (Exception e) { 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()
@Override .addDocumentListener(new DocumentListener() {
public void changedUpdate(DocumentEvent e) { @Override
changed(); public void changedUpdate(DocumentEvent e
} ) {
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 = "";

@ -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…
Cancel
Save