diff --git a/src/main/java/net/pixtaded/crab/client/ClientColor.java b/src/main/java/net/pixtaded/crab/client/ClientColor.java new file mode 100644 index 0000000..7a2bbf3 --- /dev/null +++ b/src/main/java/net/pixtaded/crab/client/ClientColor.java @@ -0,0 +1,4 @@ +package net.pixtaded.crab.client; + +public record ClientColor(String regex, String color) { +} diff --git a/src/main/java/net/pixtaded/crab/client/ClientUtil.java b/src/main/java/net/pixtaded/crab/client/ClientUtil.java new file mode 100644 index 0000000..48568c5 --- /dev/null +++ b/src/main/java/net/pixtaded/crab/client/ClientUtil.java @@ -0,0 +1,32 @@ +package net.pixtaded.crab.client; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class ClientUtil { + + public static final String COLOR_KEY = "\u2550\u2550\u2550"; + + public static final ClientColor[] colors = { + new ClientColor( COLOR_KEY + "(<.*?>)", "\033[0;31m$1\033[0m"), + new ClientColor("\uB9AC\u3E70(<.*?>)", "\033[0;32m$1\033[0m"), + new ClientColor(" (<.*?>)", " \033[0;34m$1\033[0m") + /* + I'm too lazy to add a message parser, which is absolutely required for Mefedroniy color support. For now, it will be just white. + Also, there is another problem with that - there is no "server log format" in the protocol specification, + and I want my client to be as compatible as possible. + */ + }; + + public static String clientColors(String s) { + for (ClientColor color : colors) s = matchClientKey(s, color); + return s; + } + + private static String matchClientKey(String s, ClientColor color) { + Pattern p = Pattern.compile(color.regex()); + Matcher m = p.matcher(s); + + return m.replaceAll(color.color()); + } +} diff --git a/src/main/java/net/pixtaded/crab/client/CrabClient.java b/src/main/java/net/pixtaded/crab/client/CrabClient.java index 00491b9..8a58ca8 100644 --- a/src/main/java/net/pixtaded/crab/client/CrabClient.java +++ b/src/main/java/net/pixtaded/crab/client/CrabClient.java @@ -30,7 +30,7 @@ public class CrabClient implements Crab { this.serverAddress = serverAddress; this.port = port; if (nickname != null) - this.nickname = "<" + nickname + "> "; + this.nickname = ClientUtil.COLOR_KEY + "<" + nickname + "> "; else this.nickname = ""; } @@ -71,7 +71,7 @@ public class CrabClient implements Crab { System.out.print("Enter your nickname (leave empty for no nickname): "); nickname = scanner.nextLine(); if (!nickname.isEmpty()) - nickname = "<" + nickname + "> "; + nickname = ClientUtil.COLOR_KEY + "<" + nickname + "> "; } private void connect() throws IOException { @@ -109,7 +109,7 @@ public class CrabClient implements Crab { private void printLogs() { clearScreen(); - System.out.print(Sanitizer.sanitizeString(cache.content(), false)); + System.out.print(ClientUtil.clientColors(Sanitizer.sanitizeString(cache.content(), false))); } private void sendMessage(String msg) throws IOException {