summaryrefslogtreecommitdiff
path: root/tutorials/java/src/phpdbg/ui/JTerminalPane.java
diff options
context:
space:
mode:
authorkrakjoe <joe.watkins@live.co.uk>2013-11-29 09:16:07 +0000
committerkrakjoe <joe.watkins@live.co.uk>2013-11-29 09:16:07 +0000
commit5f0a0f12e1e317d6ac2e053cea71925aedd3009c (patch)
treea1f9c50ca1031e3314dfd2761306eae48c2f9cdc /tutorials/java/src/phpdbg/ui/JTerminalPane.java
parent883f34f4870627eac2706c71b4880e4960bc5953 (diff)
downloadphp-git-5f0a0f12e1e317d6ac2e053cea71925aedd3009c.tar.gz
...
Diffstat (limited to 'tutorials/java/src/phpdbg/ui/JTerminalPane.java')
-rw-r--r--tutorials/java/src/phpdbg/ui/JTerminalPane.java162
1 files changed, 162 insertions, 0 deletions
diff --git a/tutorials/java/src/phpdbg/ui/JTerminalPane.java b/tutorials/java/src/phpdbg/ui/JTerminalPane.java
new file mode 100644
index 0000000000..eb93891688
--- /dev/null
+++ b/tutorials/java/src/phpdbg/ui/JTerminalPane.java
@@ -0,0 +1,162 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package phpdbg.ui;
+
+/**
+ *
+ * @author krakjoe
+ */
+import javax.swing.*;
+import javax.swing.text.*;
+import java.awt.Color;
+
+public class JTerminalPane extends JTextPane {
+
+ private static final Color D_Black = Color.getHSBColor( 0.000f, 0.000f, 0.000f );
+ private static final Color D_Red = Color.getHSBColor( 0.000f, 1.000f, 0.502f );
+ private static final Color D_Blue = Color.getHSBColor( 0.667f, 1.000f, 0.502f );
+ private static final Color D_Magenta = Color.getHSBColor( 0.833f, 1.000f, 0.502f );
+ private static final Color D_Green = Color.getHSBColor( 0.333f, 1.000f, 0.502f );
+ private static final Color D_Yellow = Color.getHSBColor( 0.167f, 1.000f, 0.502f );
+ private static final Color D_Cyan = Color.getHSBColor( 0.500f, 1.000f, 0.502f );
+ private static final Color D_White = Color.getHSBColor( 0.000f, 0.000f, 0.753f );
+ private static final Color B_Black = Color.getHSBColor( 0.000f, 0.000f, 0.502f );
+ private static final Color B_Red = Color.getHSBColor( 0.000f, 1.000f, 1.000f );
+ private static final Color B_Blue = Color.getHSBColor( 0.667f, 1.000f, 1.000f );
+ private static final Color B_Magenta = Color.getHSBColor( 0.833f, 1.000f, 1.000f );
+ private static final Color B_Green = Color.getHSBColor( 0.333f, 1.000f, 1.000f );
+ private static final Color B_Yellow = Color.getHSBColor( 0.167f, 1.000f, 1.000f );
+ private static final Color B_Cyan = Color.getHSBColor( 0.500f, 1.000f, 1.000f );
+ private static final Color B_White = Color.getHSBColor( 0.000f, 0.000f, 1.000f );
+ private static final Color cReset = Color.getHSBColor( 0.000f, 0.000f, 0.000f );
+
+ private Color colorCurrent = cReset;
+ private String remaining = "";
+
+ public JTerminalPane() {
+ super();
+ }
+
+ public void append(Color c, String s) {
+ StyleContext sc = StyleContext.getDefaultStyleContext();
+ AttributeSet aset = sc.addAttribute(
+ SimpleAttributeSet.EMPTY, StyleConstants.Foreground, c);
+ setCaretPosition(getDocument().getLength());
+ setCharacterAttributes(aset, false);
+ replaceSelection(s);
+ }
+
+ public void appendANSI(String s) {
+ int aPos = 0;
+ int aIndex;
+ int mIndex;
+ String tmpString;
+ boolean stillSearching;
+
+ String addString = remaining + s;
+
+ remaining = "";
+
+ if (addString.length() > 0) {
+ aIndex = addString.indexOf("\u001B");
+ if (aIndex == -1) {
+ append(colorCurrent,addString);
+ return;
+ }
+
+ if (aIndex > 0) {
+ tmpString = addString.substring(0,aIndex);
+ append(colorCurrent, tmpString);
+ aPos = aIndex;
+ }
+
+ stillSearching = true;
+ while (stillSearching) {
+ mIndex = addString.indexOf("m",aPos);
+ if (mIndex < 0) {
+ remaining = addString.substring(aPos,addString.length());
+ stillSearching = false;
+ continue;
+ }
+ else {
+ tmpString = addString.substring(aPos,mIndex+1);
+ colorCurrent = getANSIColor(tmpString);
+ }
+ aPos = mIndex + 1;
+
+ aIndex = addString.indexOf("\u001B", aPos);
+
+ if (aIndex == -1) {
+ tmpString = addString.substring(aPos,addString.length());
+ append(colorCurrent, tmpString);
+ stillSearching = false;
+ continue;
+ }
+ tmpString = addString.substring(aPos,aIndex);
+ aPos = aIndex;
+ append(colorCurrent, tmpString);
+ }
+ }
+ }
+
+ public Color getANSIColor(String ANSIColor) {
+ switch (ANSIColor) {
+ case "\u001B[30m":
+ return D_Black;
+ case "\u001B[31m":
+ return D_Red;
+ case "\u001B[32m":
+ return D_Green;
+ case "\u001B[33m":
+ return D_Yellow;
+ case "\u001B[34m":
+ return D_Blue;
+ case "\u001B[35m":
+ return D_Magenta;
+ case "\u001B[36m":
+ return D_Cyan;
+ case "\u001B[37m":
+ return D_White;
+ case "\u001B[0;30m":
+ return D_Black;
+ case "\u001B[0;31m":
+ return D_Red;
+ case "\u001B[0;32m":
+ return D_Green;
+ case "\u001B[0;33m":
+ return D_Yellow;
+ case "\u001B[0;34m":
+ return D_Blue;
+ case "\u001B[0;35m":
+ return D_Magenta;
+ case "\u001B[0;36m":
+ return D_Cyan;
+ case "\u001B[0;37m":
+ return D_White;
+ case "\u001B[1;30m":
+ return B_Black;
+ case "\u001B[1;31m":
+ return B_Red;
+ case "\u001B[1;32m":
+ return B_Green;
+ case "\u001B[1;33m":
+ return B_Yellow;
+ case "\u001B[1;34m":
+ return B_Blue;
+ case "\u001B[1;35m":
+ return B_Magenta;
+ case "\u001B[1;36m":
+ return B_Cyan;
+ case "\u001B[1;37m":
+ return B_White;
+ case "\u001B[0m":
+ return cReset;
+ default:
+ return B_White;
+ }
+ }
+}