From 3635fea2f57fd4cbd37ca1ae926cc4531e730f6c Mon Sep 17 00:00:00 2001 From: ME1312 Date: Sun, 6 Jan 2019 15:58:15 -0500 Subject: [PATCH] Update SubServers.Console --- .../Host/Internal/InternalSubCreator.java | 21 +- .../SubServers/Client/Bukkit/SubCommand.java | 2 +- SubServers.Console/pom.xml | 7 + .../Console/AnsiHTMLColorStream.java | 170 ---------- .../ME1312/SubServers/Console/ConsoleFont.ttf | Bin 0 -> 212160 bytes .../SubServers/Console/ConsoleWindow.java | 158 +++++++-- .../ME1312/SubServers/Console/HTMLogger.java | 304 ++++++++++++++++++ 7 files changed, 460 insertions(+), 202 deletions(-) delete mode 100644 SubServers.Console/src/net/ME1312/SubServers/Console/AnsiHTMLColorStream.java create mode 100644 SubServers.Console/src/net/ME1312/SubServers/Console/ConsoleFont.ttf create mode 100644 SubServers.Console/src/net/ME1312/SubServers/Console/HTMLogger.java diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Internal/InternalSubCreator.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Internal/InternalSubCreator.java index dfef7c78..fa566b62 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Internal/InternalSubCreator.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Internal/InternalSubCreator.java @@ -323,19 +323,20 @@ public class InternalSubCreator extends SubCreator { }).getPort(); } + CreatorTask task = new CreatorTask(player, name, template, version, port, server -> { + if (callback != null && server != null) try { + callback.run(server); + } catch (Throwable e) { + Throwable ew = new InvocationTargetException(e); + ew.setStackTrace(origin); + ew.printStackTrace(); + } + }); + this.thread.put(name.toLowerCase(), task); + final SubCreateEvent event = new SubCreateEvent(player, host, name, template, version, port); host.plugin.getPluginManager().callEvent(event); if (!event.isCancelled()) { - CreatorTask task = new CreatorTask(player, name, template, version, port, server -> { - if (callback != null && server != null) try { - callback.run(server); - } catch (Throwable e) { - Throwable ew = new InvocationTargetException(e); - ew.setStackTrace(origin); - ew.printStackTrace(); - } - }); - this.thread.put(name.toLowerCase(), task); task.start(); return true; } else { diff --git a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/SubCommand.java b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/SubCommand.java index e69e157a..bb1d2f6b 100644 --- a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/SubCommand.java +++ b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/SubCommand.java @@ -151,7 +151,7 @@ public final class SubCommand implements CommandExecutor { if (plugin.config.get().getSection("Settings").getBoolean("Show-Addresses", false)) { message += " (" + host.getAddress() + ((host.getName().equals(host.getDisplayName()))?"":ChatColor.stripColor(div)+host.getName()) + ")"; } else if (!host.getName().equals(host.getDisplayName())) { - message += " (" + host + ")"; + message += " (" + host.getName() + ")"; } message += plugin.api.getLang("SubServers", "Command.List.Header"); for (SubServer subserver : host.getSubServers().values()) { diff --git a/SubServers.Console/pom.xml b/SubServers.Console/pom.xml index 5f226f2a..fb57342c 100644 --- a/SubServers.Console/pom.xml +++ b/SubServers.Console/pom.xml @@ -17,6 +17,13 @@ + + org.fusesource.jansi + jansi + 1.17.1 + compile + true + com.intellij forms_rt diff --git a/SubServers.Console/src/net/ME1312/SubServers/Console/AnsiHTMLColorStream.java b/SubServers.Console/src/net/ME1312/SubServers/Console/AnsiHTMLColorStream.java deleted file mode 100644 index 98fc7b88..00000000 --- a/SubServers.Console/src/net/ME1312/SubServers/Console/AnsiHTMLColorStream.java +++ /dev/null @@ -1,170 +0,0 @@ -package net.ME1312.SubServers.Console; - -import org.fusesource.jansi.AnsiOutputStream; - -import java.io.IOException; -import java.io.OutputStream; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; - -public class AnsiHTMLColorStream extends AnsiOutputStream { - private static final String[] ANSI_COLOR_MAP = new String[]{"000000", "cd0000", "25bc24", "e1e100", "0000ee", "cd00cd", "00e1e1", "ffffff"}; - private static final byte[] BYTES_NBSP = " ".getBytes(); - private static final byte[] BYTES_QUOT = """.getBytes(); - private static final byte[] BYTES_AMP = "&".getBytes(); - private static final byte[] BYTES_LT = "<".getBytes(); - private static final byte[] BYTES_GT = ">".getBytes(); - private LinkedList closingAttributes = new LinkedList(); - private boolean underline = false; - private boolean strikethrough = false; - - public void close() throws IOException { - this.closeAttributes(); - super.close(); - } - - public AnsiHTMLColorStream(OutputStream os) { - super(os); - } - - private void write(String s) throws IOException { - super.out.write(s.getBytes()); - } - - private void writeAttribute(String s) throws IOException { - this.write("<" + s + ">"); - this.closingAttributes.add(0, s); - } - - private void closeAttribute(String s) throws IOException { - LinkedList closedAttributes = new LinkedList(); - LinkedList closingAttributes = new LinkedList(); - LinkedList unclosedAttributes = new LinkedList(); - - closingAttributes.addAll(this.closingAttributes); - for (String attr : closingAttributes) { - if (attr.toLowerCase().startsWith(s.toLowerCase())) { - for (String a : unclosedAttributes) { - closedAttributes.add(0, a); - this.write(""); - } - this.closingAttributes.removeFirstOccurrence(attr); - unclosedAttributes.clear(); - this.write(""); - } else { - unclosedAttributes.add(attr); - } - } - for (String attr : closedAttributes) { - this.write("<" + attr + ">"); - } - } - - private void closeAttributes() throws IOException { - for (String attr : closingAttributes) { - this.write(""); - } - - this.underline = false; - this.strikethrough = false; - this.closingAttributes.clear(); - } - - private boolean nbsp = true; - @Override public void write(int data) throws IOException { - if (data == 32) { - if (nbsp) this.out.write(BYTES_NBSP); - else super.write(data); - nbsp = !nbsp; - } else { - nbsp = false; - switch(data) { - case 34: - this.out.write(BYTES_QUOT); - break; - case 38: - this.out.write(BYTES_AMP); - break; - case 60: - this.out.write(BYTES_LT); - break; - case 62: - this.out.write(BYTES_GT); - break; - default: - super.write(data); - } - } - } - - public void writeLine(byte[] buf, int offset, int len) throws IOException { - this.write(buf, offset, len); - this.closeAttributes(); - } - - private String parseTextDecoration() { - String dec = ""; - if (underline) dec += " underline"; - if (strikethrough) dec += " line-through"; - if (dec.length() <= 0) dec += " none"; - - return dec.substring(1); - } - - @Override - protected void processSetAttribute(int attribute) throws IOException { - switch(attribute) { - case 1: - this.writeAttribute("b"); - break; - case 3: - this.writeAttribute("i"); - break; - case 4: - this.closeAttribute("span class=\"ansi-decoration"); - this.underline = true; - this.writeAttribute("span class=\"ansi-decoration\" style=\"text-decoration: " + parseTextDecoration() + ";\""); - break; - case 9: - this.closeAttribute("span class=\"ansi-decoration"); - this.strikethrough = true; - this.writeAttribute("span class=\"ansi-decoration\" style=\"text-decoration: " + parseTextDecoration() + ";\""); - break; - case 22: - this.closeAttribute("b"); - break; - case 23: - this.closeAttribute("i"); - break; - case 24: - this.closeAttribute("span class=\"ansi-decoration"); - this.underline = false; - this.writeAttribute("span class=\"ansi-decoration\" style=\"text-decoration: " + parseTextDecoration() + ";\""); - break; - case 29: - this.closeAttribute("span class=\"ansi-decoration"); - this.strikethrough = false; - this.writeAttribute("span class=\"ansi-decoration\" style=\"text-decoration: " + parseTextDecoration() + ";\""); - break; - default: - break; - } - } - - @Override - protected void processAttributeRest() throws IOException { - this.closeAttributes(); - } - - @Override - protected void processSetForegroundColor(int color) throws IOException { - this.writeAttribute("span class=\"ansi-foreground\" style=\"color: #" + ANSI_COLOR_MAP[color] + ";\""); - } - - @Override - protected void processSetBackgroundColor(int color) throws IOException { - this.writeAttribute("span class=\"ansi-background\" style=\"background-color: #" + ANSI_COLOR_MAP[color] + ";\""); - } -} diff --git a/SubServers.Console/src/net/ME1312/SubServers/Console/ConsoleFont.ttf b/SubServers.Console/src/net/ME1312/SubServers/Console/ConsoleFont.ttf new file mode 100644 index 0000000000000000000000000000000000000000..5d1579c7f8fd5e9b4da644decbbc2c887deacb84 GIT binary patch literal 212160 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 z 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
FbUCmmf>|WvT!4^m{80EggTm*)O>_)b(jy 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 J7bT;@|3AvTL%sk2 literal 0 HcmV?d00001 diff --git a/SubServers.Console/src/net/ME1312/SubServers/Console/ConsoleWindow.java b/SubServers.Console/src/net/ME1312/SubServers/Console/ConsoleWindow.java index de3430eb..02f042e6 100644 --- a/SubServers.Console/src/net/ME1312/SubServers/Console/ConsoleWindow.java +++ b/SubServers.Console/src/net/ME1312/SubServers/Console/ConsoleWindow.java @@ -5,8 +5,6 @@ import net.ME1312.SubServers.Bungee.Host.SubLogFilter; import net.ME1312.SubServers.Bungee.Host.SubLogger; import net.ME1312.SubServers.Bungee.Host.SubServer; import net.ME1312.SubServers.Bungee.Library.Util; -import net.md_5.bungee.api.ProxyServer; -import org.fusesource.jansi.AnsiOutputStream; import javax.imageio.ImageIO; import javax.swing.*; @@ -19,16 +17,15 @@ import javax.swing.text.html.HTMLEditorKit; import javax.swing.text.html.StyleSheet; import java.awt.*; import java.awt.event.*; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.OutputStream; +import java.io.*; import java.text.SimpleDateFormat; import java.util.*; import java.util.List; import java.util.logging.Level; public final class ConsoleWindow implements SubLogFilter { - private static String RESET_VALUE = "\n\u00A0\n\u00A0"; + private static final int MAX_SCROLLBACK = (Integer.getInteger("subservers.console.max_scrollback", 15000) >= 128)?Integer.getInteger("subservers.console.max_scrollback", 15000):15000; + private static final String RESET_VALUE = "\n\u00A0\n\u00A0"; private ConsolePlugin plugin; private JFrame window; private JPanel panel; @@ -49,25 +46,50 @@ public final class ConsoleWindow implements SubLogFilter { private boolean open = false; private SubLogger logger; private int fontSize = 12; - private boolean ansi = true; - private AnsiOutputStream stream = new AnsiHTMLColorStream(new OutputStream() { - ByteArrayOutputStream stream = new ByteArrayOutputStream(); + private File file = null; + private FileOutputStream filewriter = null; + private ByteArrayOutputStream scache = new ByteArrayOutputStream(); + private AnsiUIOutputStream stream = AnsiUIOutputStream.wrap(new OutputStream() { + + private int countLines(String str) { + int count = 0; + for (int i = 0; i < str.length(); i++) if (str.charAt(i) == '\n') count++; + return count; + } @Override public void write(int b) throws IOException { - stream.write(b); - if (((char) b) == '\n') { + scache.write(b); + if (b == '\n') { try { + int lines; + String content; + while (log.getSelectionStart() == log.getSelectionEnd() && (lines = countLines(content = log.getDocument().getText(0, log.getDocument().getLength()))) > MAX_SCROLLBACK) { + int lineBreak = 1; + for (lines -= MAX_SCROLLBACK; lines > 0; lines--) lineBreak = content.indexOf('\n', lineBreak + 1); + if (lineBreak >= 2) { + log.getDocument().remove(2, lineBreak); + } else break; + } + } catch (Exception e) {} try { HTMLEditorKit kit = (HTMLEditorKit) log.getEditorKit(); HTMLDocument doc = (HTMLDocument) log.getDocument(); - kit.insertHTML(doc, doc.getLength() - 2, new String(stream.toByteArray(), "UTF-8"), 0, 0, null); - hScroll(); - } catch (BadLocationException e) { - e.printStackTrace(); - } - stream = new ByteArrayOutputStream(); + kit.insertHTML(doc, doc.getLength() - 2, new String(scache.toByteArray(), "UTF-8"), 0, 0, null); + EventQueue.invokeLater(new Runnable() { + @Override + public void run() { + hScroll(); + } + }); + } catch (Exception e) {} + scache = new ByteArrayOutputStream(); } } + }, new HTMLogger.HTMConstructor() { + @Override + public AnsiUIOutputStream construct(OutputStream raw, OutputStream wrapped) { + return new AnsiUIOutputStream(raw, wrapped); + } }); private boolean[] kpressed = new boolean[65535]; private KeyEventDispatcher keys = new KeyEventDispatcher() { @@ -116,6 +138,14 @@ public final class ConsoleWindow implements SubLogFilter { this.plugin = plugin; this.logger = logger; + try { + file = File.createTempFile("SubServers.Console.", ".log"); + file.deleteOnExit(); + filewriter = new FileOutputStream(file, false); + } catch (Exception e) { + e.printStackTrace(); + } + window = new JFrame(); JMenuBar jMenu = new JMenuBar(); @@ -135,6 +165,7 @@ public final class ConsoleWindow implements SubLogFilter { @Override public void actionPerformed(ActionEvent event) { log.setText(RESET_VALUE); + ConsoleWindow.this.loadContent(); } }); menu.add(item); @@ -241,13 +272,14 @@ public final class ConsoleWindow implements SubLogFilter { }); menu.add(item); menu.addSeparator(); - item = new JCheckBoxMenuItem("Show Text Colors"); + item = new JCheckBoxMenuItem("Use ANSI Formatting"); item.setSelected(true); item.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent event) { - ansi = ((AbstractButton) event.getSource()).getModel().isSelected(); + stream.ansi(((AbstractButton) event.getSource()).getModel().isSelected()); log.setText(RESET_VALUE); + ConsoleWindow.this.loadContent(); } }); menu.add(item); @@ -321,7 +353,16 @@ public final class ConsoleWindow implements SubLogFilter { log.setContentType("text/html"); log.setEditorKit(new HTMLEditorKit()); StyleSheet style = new StyleSheet(); - style.addRule("body {color: #dcdcdc; font-family: courier; font-size: 12;}\n"); + String font; + try { + Font f = Font.createFont(Font.TRUETYPE_FONT, ConsoleWindow.class.getResourceAsStream("/net/ME1312/SubServers/Console/ConsoleFont.ttf")); + GraphicsEnvironment.getLocalGraphicsEnvironment().registerFont(f); + font = f.getFontName(); + input.setFont(f.deriveFont(14f)); + } catch (Exception e) { + font = "Courier"; + } + style.addRule("body {color: #dcdcdc; font-family: " + font + "; font-size: 12;}\n"); log.setDocument(new HTMLDocument(style)); log.setBorder(BorderFactory.createLineBorder(new Color(40, 44, 45))); new TextFieldPopup(log, false); @@ -515,6 +556,7 @@ public final class ConsoleWindow implements SubLogFilter { logger.registerFilter(this); log.setText(RESET_VALUE); + loadContent(); KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(keys); if (logger.isLogging() && !open) open(); } @@ -531,7 +573,9 @@ public final class ConsoleWindow implements SubLogFilter { public void log(Date date, String message) { try { - stream.write(('\u00A0' + new SimpleDateFormat("hh:mm:ss").format(date) + ' ' + ((ansi)?message:message.replaceAll("\u001B\\[[;\\d]*m", "")) + "\u00A0\n").getBytes("UTF-8")); + byte[] msg = ('\u00A0' + new SimpleDateFormat("hh:mm:ss").format(date) + ' ' + message + "\u00A0\n").getBytes("UTF-8"); + filewriter.write(msg); + stream.write(msg); } catch (IOException e) { e.printStackTrace(); } @@ -569,10 +613,33 @@ public final class ConsoleWindow implements SubLogFilter { return open; } + private void loadContent() { + if (file != null) { + try (FileInputStream reader = new FileInputStream(file)) { + int b; + while ((b = reader.read()) != -1) { + stream.write(b); + } + } catch (Exception e) { + e.printStackTrace(); + } + hScroll(); + } + } + @Override public void stop() { close(); clear(); + if (filewriter != null) try { + filewriter.close(); + } catch (Exception e) {} + if (file != null) try { + filewriter = new FileOutputStream(file, false); + } catch (Exception e) { + e.printStackTrace(); + } + } public void close() { if (open) { @@ -590,6 +657,10 @@ public final class ConsoleWindow implements SubLogFilter { public void destroy() { close(); logger.unregisterFilter(this); + if (filewriter != null) try { + filewriter.close(); + } catch (Exception e) {} + if (file != null) file.delete(); KeyboardFocusManager.getCurrentKeyboardFocusManager().removeKeyEventDispatcher(keys); } @@ -753,6 +824,51 @@ public final class ConsoleWindow implements SubLogFilter { } } } + private class AnsiUIOutputStream extends HTMLogger { + public AnsiUIOutputStream(OutputStream raw, OutputStream wrapped) { + super(raw, wrapped); + } + + public void ansi(boolean value) { + ansi = value; + } + + @Override + protected void processChangeWindowTitle(String label) { + window.setTitle(logger.getName() + " \u2014 SubServers 2" + ((label.length() <= 0)?"":" \u2014 " + label)); + } + + @Override + protected void processEraseLine(int mode) throws IOException { + processDeleteLine(1); + } + + @Override + protected void processEraseScreen(int mode) throws IOException { + if (ansi) log.setText(RESET_VALUE); + } + + @Override + protected void processDeleteLine(int amount) throws IOException { + if (ansi) try { + String content = log.getDocument().getText(0, log.getDocument().getLength()); + while (amount > 0) { + int lastLineBreak = content.lastIndexOf('\n'); + int length = log.getDocument().getLength() - lastLineBreak - 2; + if (lastLineBreak >= 0 && length > 0) { + log.getDocument().remove(lastLineBreak, length); + } + amount--; + } + } catch (Exception e) {} + } + + @Override + public void close() throws IOException { + open = false; + super.close(); + } + } private class SmartScroller implements AdjustmentListener { public final static int HORIZONTAL = 0; public final static int VERTICAL = 1; diff --git a/SubServers.Console/src/net/ME1312/SubServers/Console/HTMLogger.java b/SubServers.Console/src/net/ME1312/SubServers/Console/HTMLogger.java new file mode 100644 index 00000000..41bbee61 --- /dev/null +++ b/SubServers.Console/src/net/ME1312/SubServers/Console/HTMLogger.java @@ -0,0 +1,304 @@ +package net.ME1312.SubServers.Console; + +import net.ME1312.SubServers.Bungee.Library.Container; +import org.fusesource.jansi.AnsiOutputStream; + +import java.io.IOException; +import java.io.OutputStream; +import java.net.URLDecoder; +import java.util.LinkedList; + +/** + * HTML Log Stream Class + */ +public class HTMLogger extends AnsiOutputStream { + private static final String[] ANSI_COLOR_MAP = new String[]{"000000", "cd0000", "25bc24", "d7d700", "0000c3", "be00be", "00a5dc", "cccccc"}; + private static final String[] ANSI_BRIGHT_COLOR_MAP = new String[]{"808080", "ff0000", "31e722", "ffff00", "0000ff", "ff00ff", "00c8ff", "ffffff"}; + private static final byte[] BYTES_NBSP = " ".getBytes(); + private static final byte[] BYTES_QUOT = """.getBytes(); + private static final byte[] BYTES_AMP = "&".getBytes(); + private static final byte[] BYTES_LT = "<".getBytes(); + private static final byte[] BYTES_GT = ">".getBytes(); + private LinkedList closingAttributes = new LinkedList(); + private OutputStream raw; + protected boolean ansi = true; + private boolean underline = false; + private boolean strikethrough = false; + + /** + * Parse data from an OutputStream + * + * @param raw OutputStream + * @return HTMLogger + */ + public static HTMLogger wrap(OutputStream raw) { + return wrap(raw, new HTMConstructor() { + @Override + public HTMLogger construct(OutputStream raw1, OutputStream wrapped) { + return new HTMLogger(raw1, wrapped); + } + }); + } + + /** + * Parse data from an OutputStream + * + * @param raw OutputStream + * @param constructor Implementing Constructor + * @param Logger Type + * @return HTMLogger + */ + public static T wrap(final OutputStream raw, HTMConstructor constructor) { + final Container html = new Container(null); + html.set(constructor.construct(raw, new OutputStream() { + private boolean nbsp = false; + + @Override + public void write(int data) throws IOException { + if (data == 32) { + if (nbsp) raw.write(BYTES_NBSP); + else raw.write(data); + nbsp = !nbsp; + } else { + nbsp = false; + switch(data) { + case 34: + raw.write(BYTES_QUOT); + break; + case 38: + raw.write(BYTES_AMP); + break; + case 60: + raw.write(BYTES_LT); + break; + case 62: + raw.write(BYTES_GT); + break; + case 10: + html.get().closeAttributes(); + default: + raw.write(data); + } + } + } + })); + return html.get(); + } + protected HTMLogger(final OutputStream raw, OutputStream wrapped) { + super(wrapped); + this.raw = raw; + } + public interface HTMConstructor { + T construct(OutputStream raw, OutputStream wrapped); + } + + private void write(String s) throws IOException { + raw.write(s.getBytes()); + } + + private void writeAttribute(String s) throws IOException { + write("<" + s + ">"); + closingAttributes.add(0, s); + } + + protected void closeAttribute(String s) throws IOException { + LinkedList closedAttributes = new LinkedList(); + LinkedList closingAttributes = new LinkedList(); + LinkedList unclosedAttributes = new LinkedList(); + + closingAttributes.addAll(closingAttributes); + for (String attr : closingAttributes) { + if (attr.toLowerCase().startsWith(s.toLowerCase())) { + for (String a : unclosedAttributes) { + closedAttributes.add(0, a); + write(""); + } + closingAttributes.removeFirstOccurrence(attr); + unclosedAttributes.clear(); + write(""); + } else { + unclosedAttributes.add(attr); + } + } + for (String attr : closedAttributes) { + write("<" + attr + ">"); + } + } + + protected void closeAttributes() throws IOException { + for (String attr : closingAttributes) { + write(""); + } + + underline = false; + strikethrough = false; + closingAttributes.clear(); + } + + @Override + protected void processDeleteLine(int amount) throws IOException { + super.processDeleteLine(amount); + } + + private String parseTextDecoration() { + String dec = ""; + if (underline) dec += " underline"; + if (strikethrough) dec += " line-through"; + if (dec.length() <= 0) dec += " none"; + + return dec.substring(1); + } + + @Override + protected void processSetAttribute(int attribute) throws IOException { + if (ansi) switch(attribute) { + case 1: + closeAttribute("b"); + writeAttribute("b"); + break; + case 3: + closeAttribute("i"); + writeAttribute("i"); + break; + case 4: + closeAttribute("span class=\"ansi-decoration"); + underline = true; + writeAttribute("span class=\"ansi-decoration\" style=\"text-decoration: " + parseTextDecoration() + ";\""); + break; + case 9: + closeAttribute("span class=\"ansi-decoration"); + strikethrough = true; + writeAttribute("span class=\"ansi-decoration\" style=\"text-decoration: " + parseTextDecoration() + ";\""); + break; + case 22: + closeAttribute("b"); + break; + case 23: + closeAttribute("i"); + break; + case 24: + closeAttribute("span class=\"ansi-decoration"); + underline = false; + writeAttribute("span class=\"ansi-decoration\" style=\"text-decoration: " + parseTextDecoration() + ";\""); + break; + case 29: + closeAttribute("span class=\"ansi-decoration"); + strikethrough = false; + writeAttribute("span class=\"ansi-decoration\" style=\"text-decoration: " + parseTextDecoration() + ";\""); + break; + } + } + + @Override + protected void processUnknownOperatingSystemCommand(int label, String arg) { + try { + if (ansi) switch (label) { + case 99900: // Galaxi Console Exclusives 99900-99999 + closeAttribute("a"); + writeAttribute("a href=\"" + arg + "\" target=\"_blank\""); + break; + case 99901: + closeAttribute("a"); + break; + } + } catch (Exception e) {} + } + + @Override + protected void processAttributeRest() throws IOException { + closeAttributes(); + } + + private String parse8BitColor(int color) throws IOException { + if (color < 8) { + return ANSI_COLOR_MAP[color]; + } else if (color < 16) { + return ANSI_BRIGHT_COLOR_MAP[color - 8]; + } else if (color < 232) { + int r = (int) (Math.floor((color - 16) / 36d) * (255 / 5)); + int g = (int) (Math.floor(((color - 16) % 36d) / 6d) * (255 / 5)); + int b = (int) (Math.floor(((color - 16) % 36d) % 6d) * (255 / 5)); + return ((r >= 16)?"":"0") + Integer.toString(r, 16) + ((g >= 16)?"":"0") + Integer.toString(g, 16) + ((b >= 16)?"":"0") + Integer.toString(b, 16); + } else if (color < 256) { + int gray = (int) ((255 / 25d) * (color - 232 + 1)); + return ((gray >= 16)?"":"0") + Integer.toString(gray, 16) + ((gray >= 16)?"":"0") + Integer.toString(gray, 16) + ((gray >= 16)?"":"0") + Integer.toString(gray, 16); + } else { + throw new IOException("Invalid 8 Bit Color: " + color); + } + } + + @Override + protected void processDefaultTextColor() throws IOException { + closeAttribute("span class=\"ansi-foreground"); + } + + @Override + protected void processSetForegroundColor(int color) throws IOException { + processSetForegroundColor(color, false); + } + + @Override + protected void processSetForegroundColor(int color, boolean bright) throws IOException { + if (ansi) { + processDefaultTextColor(); + writeAttribute("span class=\"ansi-foreground\" style=\"color: #" + ((!bright)?ANSI_COLOR_MAP:ANSI_BRIGHT_COLOR_MAP)[color] + ";\""); + } + } + + @Override + protected void processSetForegroundColorExt(int index) throws IOException { + if (ansi) { + processDefaultTextColor(); + writeAttribute("span class=\"ansi-foreground\" style=\"color: #" + parse8BitColor(index) + ";\""); + } + } + + @Override + protected void processSetForegroundColorExt(int r, int g, int b) throws IOException { + if (ansi) { + processDefaultTextColor(); + writeAttribute("span class=\"ansi-foreground\" style=\"color: #" + ((r >= 16)?"":"0") + Integer.toString(r, 16) + ((g >= 16)?"":"0") + Integer.toString(g, 16) + ((b >= 16)?"":"0") + Integer.toString(b, 16) + ";\""); + } + } + + @Override + protected void processDefaultBackgroundColor() throws IOException { + closeAttribute("span class=\"ansi-background"); + } + + @Override + protected void processSetBackgroundColor(int color) throws IOException { + processSetBackgroundColor(color, false); + } + + @Override + protected void processSetBackgroundColor(int color, boolean bright) throws IOException { + if (ansi) { + processDefaultBackgroundColor(); + writeAttribute("span class=\"ansi-background\" style=\"background-color: #" + ((!bright)?ANSI_COLOR_MAP:ANSI_BRIGHT_COLOR_MAP)[color] + ";\""); + } + } + + @Override + protected void processSetBackgroundColorExt(int index) throws IOException { + if (ansi) { + processDefaultBackgroundColor(); + writeAttribute("span class=\"ansi-background\" style=\"background-color: #" + parse8BitColor(index) + ";\""); + } + } + + @Override + protected void processSetBackgroundColorExt(int r, int g, int b) throws IOException { + if (ansi) { + processDefaultBackgroundColor(); + writeAttribute("span class=\"ansi-background\" style=\"background-color: #" + ((r >= 16)?"":"0") + Integer.toString(r, 16) + ((g >= 16)?"":"0") + Integer.toString(g, 16) + ((b >= 16)?"":"0") + Integer.toString(b, 16) + ";\""); + } + } + + @Override + public void close() throws IOException { + closeAttributes(); + super.close(); + raw.close(); + } +}