]> granicus.if.org Git - php/commitdiff
support all colors and underline in java ui
authorkrakjoe <joe.watkins@live.co.uk>
Sat, 30 Nov 2013 17:19:01 +0000 (17:19 +0000)
committerkrakjoe <joe.watkins@live.co.uk>
Sat, 30 Nov 2013 17:19:01 +0000 (17:19 +0000)
phpdbg_utils.c
tutorials/java/dist/phpdbg-ui.jar
tutorials/java/src/phpdbg/ui/JTerminalPane.java

index 5232f31747872cbe164638c6f81f7721b34d78cb..4b58448f0a9b674ee200981743ec6a93c0935d5e 100644 (file)
@@ -257,12 +257,12 @@ PHPDBG_API int phpdbg_rlog(FILE *fp, const char *fmt, ...) { /* {{{ */
                
                strftime(friendly, 100, "%a %b %d %T.%%04d %Y", localtime(&tp.tv_sec));
                asprintf(
-                       &buffer, friendly, tp.tv_usec/1000);            
+                       &buffer, friendly, tp.tv_usec/1000);    
                asprintf(
                        &format, "[%s]: %s\n", buffer, fmt);
                rc = vfprintf(
                        fp, format, args);
-                       
+
                free(format);
                free(buffer);
        }
index f1d9f9fddb89b094c3a91a1c0331dfd96aeac283..2252c545b9e0dbe494298f33ff99c72811f460b8 100644 (file)
Binary files a/tutorials/java/dist/phpdbg-ui.jar and b/tutorials/java/dist/phpdbg-ui.jar differ
index ae63c223004bc814606eb7e6690744f453f26704..6f79eb0f8981ae0d6e36a55637aa7121424af049 100644 (file)
@@ -16,172 +16,173 @@ import java.awt.Color;
 import java.awt.Graphics;
 import java.awt.Image;
 import java.io.IOException;
+import java.util.HashMap;
 import javax.imageio.ImageIO;
 
 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, 1.000f );
-
-  private Color colorCurrent    = cReset;
-  private String remaining = "";
-  
-  public JTerminalPane() {
-      super();
-      setOpaque(false);
-      setBackground(new Color(0, 0, 0, 0));
-  }
-  
-  @Override public void paintComponent(Graphics g) {
-      g.setColor(Color.BLACK);
-      g.fillRect(0, 0, getWidth(), getHeight());
-      
-      try {
-          Image image = ImageIO.read(
-                  JTerminalPane.class.getResource("logo-small.png"));
-          
-          g.drawImage(
-                  image, 
-                  getWidth() - image.getWidth(this) - 10, 
-                  getHeight() - image.getHeight(this) - 10, 
-                  image.getWidth(this), image.getHeight(this), this);
-          
-      } catch (IOException | NullPointerException | IllegalArgumentException ex) {}
-      
-      super.paintComponent(g);
-  }
-  
-  public void append(Color c, String s) {
-    StyleContext sc = StyleContext.getDefaultStyleContext();
-    AttributeSet aset = sc.addAttribute(
-            SimpleAttributeSet.EMPTY, StyleConstants.Foreground, c);
-    setCharacterAttributes(aset, false);
-    replaceSelection(s);
-    setCaretPosition(getDocument().getLength());
-  }
-
-  public synchronized 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;
+    private static class JTerminalColor {
+        private final Color color;
+        private final Boolean bold;
+        private final Boolean underline;
+
+        public JTerminalColor(Float h, Float s, Float b, Boolean bold, Boolean underline) {
+            this.color = Color.getHSBColor(h, s, b);
+            this.bold = bold;
+            this.underline = underline;
+        }
+        
+        public JTerminalColor(Float h, Float s, Float b, Boolean bold) {
+            this.color = Color.getHSBColor(h, s, b);
+            this.bold = bold;
+            this.underline = false;
+        }
+        
+        public JTerminalColor(Float h, Float s, Float b) {
+            this.color = Color.getHSBColor(h, s, b);
+            this.underline = false;
+            this.bold = false;
+        }
+
+        public Boolean      isUnderlined()  { return this.underline; }
+        public Boolean      isBold()        { return this.bold; }
+        public Color        getColor()      { return this.color; }
+    }
+
+    private static class JTerminalColors extends HashMap<String, JTerminalColor> {
+        public JTerminalColors() {
+            put("\u001B[0;30m", new JTerminalColor(0.000f, 0.000f, 0.502f));
+            put("\u001B[0;31m", new JTerminalColor(0.000f, 1.000f, 1.000f));
+            put("\u001B[0;32m", new JTerminalColor(0.333f, 1.000f, 1.000f));
+            put("\u001B[0;33m", new JTerminalColor(0.167f, 1.000f, 1.000f));
+            put("\u001B[0;34m", new JTerminalColor(0.667f, 1.000f, 1.000f));
+            put("\u001B[0;35m", new JTerminalColor(0.833f, 1.000f, 1.000f));
+            put("\u001B[0;36m", new JTerminalColor(0.500f, 1.000f, 1.000f));
+            put("\u001B[0;37m", new JTerminalColor(0.000f, 0.000f, 1.000f));
+            put("\u001B[0;64m", new JTerminalColor(0.000f, 0.000f, 1.000f));
+            
+            put("\u001B[1;30m", new JTerminalColor(0.000f, 0.000f, 0.502f, true));
+            put("\u001B[1;31m", new JTerminalColor(0.000f, 1.000f, 1.000f, true));
+            put("\u001B[1;32m", new JTerminalColor(0.333f, 1.000f, 1.000f, true));
+            put("\u001B[1;33m", new JTerminalColor(0.167f, 1.000f, 1.000f, true));
+            put("\u001B[1;34m", new JTerminalColor(0.667f, 1.000f, 1.000f, true));
+            put("\u001B[1;35m", new JTerminalColor(0.833f, 1.000f, 1.000f, true));
+            put("\u001B[1;36m", new JTerminalColor(0.500f, 1.000f, 1.000f, true));
+            put("\u001B[1;37m", new JTerminalColor(0.000f, 0.000f, 1.000f, true));
+            put("\u001B[1;64m", new JTerminalColor(0.000f, 0.000f, 1.000f, true));
+            
+            put("\u001B[4;30m", new JTerminalColor(0.000f, 0.000f, 0.502f, false, true));
+            put("\u001B[4;31m", new JTerminalColor(0.000f, 1.000f, 1.000f, false, true));
+            put("\u001B[4;32m", new JTerminalColor(0.333f, 1.000f, 1.000f, false, true));
+            put("\u001B[4;33m", new JTerminalColor(0.167f, 1.000f, 1.000f, false, true));
+            put("\u001B[4;34m", new JTerminalColor(0.667f, 1.000f, 1.000f, false, true));
+            put("\u001B[4;35m", new JTerminalColor(0.833f, 1.000f, 1.000f, false, true));
+            put("\u001B[4;36m", new JTerminalColor(0.500f, 1.000f, 1.000f, false, true));
+            put("\u001B[4;37m", new JTerminalColor(0.000f, 0.000f, 1.000f, false, true));
+            put("\u001B[4;64m", new JTerminalColor(0.000f, 0.000f, 1.000f, false, true));
+            
+            put("reset", new JTerminalColor(0.000f, 0.000f, 1.000f));
         }
-        else {
-          tmpString = addString.substring(aPos,mIndex+1);
-          colorCurrent = getANSIColor(tmpString);
+        
+        public JTerminalColor find(String ANSIColor) {
+            if (containsKey(ANSIColor)) {
+                return get(ANSIColor);
+            } else return get("reset");
         }
-        aPos = mIndex + 1;
+    }
+    
+    public JTerminalPane() {
+        super();
+        setOpaque(false);
+        setBackground(new Color(0, 0, 0, 0));
+        colorCurrent = colors.find("reset");
+    }
+
+    @Override public void paintComponent(Graphics g) {
+        g.setColor(Color.BLACK);
+        g.fillRect(0, 0, getWidth(), getHeight());
+
+        try {
+            Image image = ImageIO.read(
+                    JTerminalPane.class.getResource("logo-small.png"));
 
-        aIndex = addString.indexOf("\u001B", aPos);
+            g.drawImage(
+                    image, 
+                    getWidth() - image.getWidth(this) - 10, 
+                    getHeight() - image.getHeight(this) - 10, 
+                    image.getWidth(this), image.getHeight(this), this);
 
-        if (aIndex == -1) {
-          tmpString = addString.substring(aPos,addString.length());
-          append(colorCurrent, tmpString);
-          stillSearching = false;
-          continue; 
+        } catch (IOException | NullPointerException | IllegalArgumentException ex) {}
+
+        super.paintComponent(g);
+    }
+
+    private void append(JTerminalColor c, String s) {
+        StyleContext sc = StyleContext.getDefaultStyleContext();
+        AttributeSet aset = sc.addAttribute(
+                SimpleAttributeSet.EMPTY, StyleConstants.Foreground, c.getColor());
+        
+        aset = sc.addAttribute(aset, StyleConstants.Underline, c.isUnderlined());
+        aset = sc.addAttribute(aset, StyleConstants.Bold, c.isBold());
+
+        setCharacterAttributes(aset, false);
+        replaceSelection(s);
+        setCaretPosition(getDocument().getLength());
+    }
+
+    public synchronized 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 = colors.find(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);
+            }
         }
-        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;
-      }
-  }
+    
+    private static JTerminalColors colors = new JTerminalColors();
+    private JTerminalColor colorCurrent;
+    private String remaining = "";
 }