Thema: [Java] KCodeParser
-
02.04.2011, 17:44 #1
- Registriert seit
- 06.11.2011
- Beiträge
- 418
Thanked 686 Times in 246 Posts[Java] KCodeParser
Da mein Emulator sowieso bald Open Source ist release ich schonmal den KCoderParser, einer der wichtigsten Tools des Emulators. Er macht Zeilenumbrüche möglich und verhindert, dass "einfache" Chatter Links und Grafiken senden können.
Code:/** * * @author Flav */ public class KCodeParser { public static String parse(String str, boolean filter, int maxLineBreaks, int minSize, int maxSize) { StringBuilder ret = new StringBuilder(); StringBuilder code = null; boolean isCode = false; boolean escape = false; byte lineBreaks = 0; for (int i = 0; i < str.length(); i++) { char current = str.charAt(i); if (current == '°' && !escape) { isCode = !isCode; if (isCode) { if (str.lastIndexOf('°') == i) { break; } code = new StringBuilder(); } else { if (filter && !code.toString().isEmpty()) { StringBuilder filtered = new StringBuilder(); StringBuilder rgb = null; boolean isRGB = false; String size; for (int j = 0; j < code.length(); j++) { char c = code.charAt(j); if (isRGB) { if (c == ']') { if (!validateRGB(rgb.toString().split(","))) { break; } isRGB = false; filtered.append('['); filtered.append(rgb); filtered.append(']'); } else if (isNumber(c) || c == ',') { rgb.append(c); } else { break; } } else { if (isNumber(c)) { size = ""; while (j < code.length()) { c = code.charAt(j); if (!isNumber(c)) { j--; break; } size += c; j++; } if (Integer.parseInt(size) < minSize) { size = String.valueOf(minSize); } else if (Integer.parseInt(size) > maxSize) { size = String.valueOf(maxSize); } filtered.append(size); } else if (isColor(c) || c == 'r') { filtered.append(c); } else if (c == '[') { isRGB = true; rgb = new StringBuilder(); } else { break; } } } if (filtered.toString().isEmpty()) { continue; } code = filtered; } ret.append('°'); ret.append(code); ret.append('°'); } continue; } if (isCode) { code.append(current); } else { if (current == '#' && !escape) { if (!filter || lineBreaks < maxLineBreaks) { ret.append("#°!°"); lineBreaks++; } else { ret.append(' '); } } else { ret.append(current); } } if (current == '\\') { escape = !escape; } else { escape = false; } } return ret.toString().trim(); } public static String escape(String message) { return message .replace("\", "\\\") .replace(""", "\\"") .replace("#", "\\#") .replace("_", "\\_") .replace("§", "\\§") .replace("°", "\\°") .trim(); } private static boolean isNumber(int character) { return character >= '0' && character <= '9'; } private static boolean isColor(int character) { switch (character) { case 'A': case 'B': case 'C': case 'D': case 'E': case 'G': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'R': case 'W': case 'Y': return true; default: return false; } } private static boolean validateRGB(String[] rgb) { if (rgb.length < 3) { return false; } for (String color : rgb) { if (color.isEmpty() || color.length() > 3) { return false; } short value = Short.parseShort(color); if (value < 0 || value > 255) { return false; } } return true; } }
Ähnliche Themen
-
Win7 Java in Safari ausführen (Fehlermeldung Java nicht installiert)
Von Silverstar im Forum WindowsAntworten: 8Letzter Beitrag: 02.12.2013, 23:41 -
Java EE 32 Bit?
Von Pwned im Forum JavaAntworten: 2Letzter Beitrag: 04.08.2012, 23:08 -
Ubuntu Sun Java
Von hYpercrites im Forum LinuxAntworten: 3Letzter Beitrag: 20.06.2012, 15:17 -
KCodeParser (KCode to HTML)
Von uncopyable im Forum SourcecodeAntworten: 1Letzter Beitrag: 29.05.2012, 01:43 -
Problem mit Java
Von Baumstumpf im Forum Fragen & ProblemeAntworten: 7Letzter Beitrag: 12.04.2012, 16:08
Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.