Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package enigma.shells.jython;
- import java.io.*;
- import java.awt.*;
- import javax.swing.*;
- import enigma.console.*;
- import enigma.console.java2d.*;
- import org.python.core.*;
- import org.python.util.*;
- public class JythonShell extends JPanel implements Runnable {
- public static int DEFAULT_ROWS = 20;
- public static int DEFAULT_COLUMNS = 80;
- public static int DEFAULT_SCROLLBACK = 100;
- public PrintStream out;
- public Console console;
- public Java2DTextWindow text;
- public JScrollPane scrollPane;
- public PythonInterpreter interp;
- private Color colorBackground = new Color(0, 0, 0);
- private Color colorForeground = new Color(187, 187, 187);
- private Color colorError = new Color(187, 0, 0);
- private Color colorCursor = new Color(187, 187, 0);
- public JythonShell() {
- this(null, Py.getSystemState());
- }
- public JythonShell(PyObject dict) {
- this(dict, Py.getSystemState());
- }
- public JythonShell(int columns, int rows, int scrollback) {
- this(null, Py.getSystemState(), columns, rows, scrollback);
- }
- public JythonShell(PyObject dict, PySystemState systemState) {
- this(dict, systemState, DEFAULT_COLUMNS, DEFAULT_ROWS, DEFAULT_SCROLLBACK);
- }
- public JythonShell(PyObject dict, PySystemState systemState, int columns, int rows, int scrollback) {
- super(new BorderLayout());
- text = new Java2DTextWindow(columns, rows, scrollback);
- text.setBackground(colorBackground);
- scrollPane = new JScrollPane();
- scrollPane.setViewportView(text);
- add(scrollPane, BorderLayout.CENTER);
- console = new DefaultConsoleImpl(text);
- out = console.getOutputStream();
- interp = new PythonInterpreter(dict, systemState);
- interp.setOut(out);
- interp.setErr(out);
- }
- public void run() {
- int pos = 0;
- int tbs = 4;
- String line = "";
- String command = "";
- for (;;) {
- String space = "";
- for (int i = 0; i < pos * tbs; i++) {
- space += " ";
- }
- try {
- console.setTextAttributes(new TextAttributes(colorCursor));
- if (pos > 0) {
- out.print(space + "... ");
- } else {
- out.print(">> ");
- }
- console.setTextAttributes(new TextAttributes(colorForeground));
- line = console.readLine().trim();
- if (line.length() == 0 && pos > 0) {
- pos--;
- } else if (line.endsWith(":")) {
- command += space + line + "\n";
- pos++;
- } else {
- command += space + line + "\n";
- }
- if (pos == 0) {
- interp.exec(command);
- command = "";
- }
- } catch (Exception e) {
- console.setTextAttributes(new TextAttributes(colorError));
- e.printStackTrace();
- command = "";
- }
- }
- }
- public static void main(String[] argv) {
- PySystemState.initialize(System.getProperties(), null, argv);
- JFrame frame = new JFrame("Jython Console");
- JythonShell console = new JythonShell();
- frame.add(console, BorderLayout.CENTER);
- frame.pack();
- frame.setVisible(true);
- frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- console.run();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement