From: krakjoe Date: Sat, 30 Nov 2013 17:19:01 +0000 (+0000) Subject: support all colors and underline in java ui X-Git-Tag: php-5.6.0alpha1~110^2~30^2~22 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=835446e63266d503a61848a3ed7d7ad48fb7ba86;p=php support all colors and underline in java ui --- diff --git a/phpdbg_utils.c b/phpdbg_utils.c index 5232f31747..4b58448f0a 100644 --- a/phpdbg_utils.c +++ b/phpdbg_utils.c @@ -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); } diff --git a/tutorials/java/dist/phpdbg-ui.jar b/tutorials/java/dist/phpdbg-ui.jar index f1d9f9fddb..2252c545b9 100644 Binary files a/tutorials/java/dist/phpdbg-ui.jar and b/tutorials/java/dist/phpdbg-ui.jar differ diff --git a/tutorials/java/src/phpdbg/ui/JTerminalPane.java b/tutorials/java/src/phpdbg/ui/JTerminalPane.java index ae63c22300..6f79eb0f89 100644 --- a/tutorials/java/src/phpdbg/ui/JTerminalPane.java +++ b/tutorials/java/src/phpdbg/ui/JTerminalPane.java @@ -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 { + 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 = ""; }