Thema: KCodeParser (KCode to HTML)
-
02.08.2012, 14:05 #1
KCodeParser (KCode to HTML)
Hallo,
hier mein KCodeParser, vielleicht kann es hier ja auch einer gebrauchen.
Funktionen:
Übersetzt Knuddels Codes in HTML, denn kann man dann z.B in ein JTextPane anzeigen lassen.
Beispiel: _Fett_ wird zu <b>Fett</b>
Folgende Knuddels Code werden unterstützt:
- _Fett_
- "Kursiv"
- °Farbe°
- °>link<°
- °>Text|link<°
- # Zeilenumbruch
- °R>Text|link<°
- °12>Text|link<°
- °>sm_01.gif<°
- °>_hJames|/serverpp "<°
PHP-Code:package jchat.tools;
import java.awt.Color;
import java.awt.Font;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
*
* @author uncopyable
*
* Version 1.2 Dienstag, 29. Mai 2012
*
* Last Modified: Mittwoch, 30. Mai 2012
* - Schönheitskorrekturen
*
*/
public class KCodeParser {
private static Color fontColor;
private static int fontSize;
private static StringBuilder code;
private static Font font;
public KCodeParser(Color fontColor, Font font) {
this.code = new StringBuilder();
this.font = font;
this.fontColor = fontColor;
this.fontSize = font.getSize();
}
public KCodeParser() {
this.code = new StringBuilder();
this.font = new Font("Arial", Font.PLAIN, 12);
this.fontColor = new Color(0, 0, 0);
this.fontSize = 12;
}
public static String parse(String text) {
code = new StringBuilder();
boolean escape = false;
boolean bold = false;
boolean italic = false;
// Style
code.append("<span style="font-size:").append(fontSize).append("px">");
code.append("<font color="").append(Integer.toString(fontColor.getRGB() & 0x00ffffff, 16)).append("">");
for (int i = 0; i < text.length(); i++) {
char ch = text.charAt(i);
switch (ch) {
case '<':
code.append("<");
break;
case '>':
code.append(">");
break;
case '&':
code.append("&");
break;
case '\\':
i++;
break;
// Smileys
case ':':
if (text.startsWith(":)", i) && (!escape)) {
code.append("<img src="http://chat.knuddels.de/pics/sm_classic_00.gif" alt=":)"/>");
i++;
} else {
code.append(":");
}
break;
// Reset Style
case '§':
escape = false;
bold = false;
italic = false;
code.append("<span style="font-size:").append(fontSize).append("px">");
code.append("<font color="").append(Integer.toString(fontColor.getRGB() & 0x00ffffff, 16)).append("">");
break;
// Bold
case '_':
if (escape) {
code.append("_");
break;
}
if (bold) {
code.append("</b>");
bold = false;
break;
}
code.append("<b>");
bold = !bold;
break;
// Italic
case '"':
if (escape) {
code.append(""");
break;
}
if (italic) {
code.append("</i>");
break;
}
code.append("<i>");
italic = !italic;
break;
// Line break
case '#':
if (escape) {
code.append("#");
break;
}
code.append("<br>");
break;
// KCode
case '°':
try {
if (escape) {
code.append("°");
break;
}
if (text.charAt(i + 1) == '°' && (!escape)) {
break;
} else if (isNumber(text.charAt(i + 1))) { // Schriftgröße
if (text.charAt(i + 3) == '>') { // Link
int length = 0;
StringBuilder size = new StringBuilder();
size.append(text.charAt(i + 1));
size.append(text.charAt(i + 2));
code.append("<span style="font-size:").append(size.toString()).append("px">");
length += size.toString().length();
String link = text.substring(i + 4);
link = link.substring(0, link.indexOf('<'));
if (link.split("\\|").length > 1) {
String href = link.split("\\|")[0];
String a = link.split("\\|")[1];
code.append("<a href="").append(href).append("">").append(a).append("</a>");
} else {
code.append("<a href="").append(link).append("">").append(link).append("</a>");
}
length += link.length() + 2;
i += length;
break;
} else if ((isNumber(text.charAt(i + 2)))) {
StringBuilder size = new StringBuilder();
size.append(text.charAt(i + 1));
size.append(text.charAt(i + 2));
code.append("<span style="font-size:").append(size.toString()).append("px">");
i += size.toString().length();
break;
} else if (text.charAt(i + 2) == '°') {
String size = text.substring(i + 1);
size = size.substring(0, size.indexOf('°'));
code.append("<span style="font-size:").append(size).append("px">");
i += size.length() + 1;
break;
} else if (text.charAt(i + 2) == '>') { // Link
int length = 0;
StringBuilder size = new StringBuilder();
size.append(text.charAt(i + 1));
code.append("<span style="font-size:").append(size.toString()).append("px">");
length += size.toString().length();
String link = text.substring(i + 3);
link = link.substring(0, link.indexOf('<'));
if (link.split("\\|").length > 1) {
String href = link.split("\\|")[0];
String a = link.split("\\|")[1];
code.append("<a href="").append(href).append("">").append(a).append("</a>");
} else {
code.append("<a href="").append(link).append("">").append(link).append("</a>");
}
length += link.length() + 2;
i += length;
break;
} else {
break;
}
} else if ((text.charAt(i + 1) == '>')) { // Link
String kcode = text.substring(i + 2);
kcode = kcode.substring(0, kcode.indexOf('<'));
if ((text.charAt(i + 2) == '_') && (text.charAt(i + 3) == 'h')) {
if (kcode.split("\\|").length > 1) {
String href = kcode.replace("_h", "").split("\\|")[0];
String a = kcode.split("\\|")[1];
a = a.replace(""", href);
code.append("<a href="").append(a).append("">").append(href).append("</a>");
}
i += kcode.length() + 2;
break;
}
if (kcode.split("\\|").length > 1) {
String href = kcode.split("\\|")[0];
String a = kcode.split("\\|")[1];
code.append("<a href="").append(href).append("">").append(a).append("</a>");
i += kcode.length() + 2;
break;
}
if (isImage(kcode)) {
code.append("<img src="http://chat.knuddels.de/pics/");
code.append(kcode);
code.append(""/>");
i += kcode.length() + 2;
break;
}
code.append("<a href="").append(kcode).append("">").append(kcode).append("</a>");
i += kcode.length() + 2;
break;
} else if (isColor(text.charAt(i + 1)) && (text.charAt(i + 2) == '>')) { // Schriftgröße
int length = 0;
String color = String.valueOf(text.charAt(i + 1));
code.append("<font color="").append(GetHtmlColor(color.charAt(0))).append("">");
length += color.length() + 1;
if (text.charAt(i + 2) == '>') { // Link
String link = text.substring(i + 3);
link = link.substring(0, link.indexOf('<'));
if (link.split("\\|").length > 1) {
String href = link.split("\\|")[0];
String a = link.split("\\|")[1];
code.append("<a href="").append(href).append("">").append(a).append("</a>");
} else {
code.append("<a href="").append(link).append("">").append(link).append("</a>");
}
length += link.length() + 2;
}
i += length;
break;
} else if (text.charAt(i + 2) == '°') { // Farbe
String color = text.substring(i + 1);
color = color.substring(0, color.indexOf('°'));
code.append("<font color="").append(GetHtmlColor(color.charAt(0))).append("">");
i += color.length() + 1;
} else if (text.charAt(i + 1) == '[') { // rgb
String rgbColor = text.substring(i + 1);
rgbColor = rgbColor.substring(0, rgbColor.indexOf('°'));
rgbColor = parseColor(rgbColor);
code.append("<font color="").append(rgbColor).append("">");
i += rgbColor.length() + 3;
break;
} else {
}
} catch (Exception ex) {
}
break;
default:
code.append(ch);
}
}
return code.toString();
}
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 'r':
case 'W':
case 'Y':
return true;
default:
return false;
}
}
private static String GetHtmlColor(char s) {
if (s == 'A') {
return "GRAY";
} else if (s == 'B') {
return "BLUE";
} else if (s == 'C') {
return "CYAN";
} else if (s == 'D') {
return "DARKGRAY";
} else if (s == 'E') {
return "DARKGREEN";
} else if (s == 'G') {
return "GREEN";
} else if (s == 'K') {
return "BLACK";
} else if (s == 'Y') {
return "YELLOW";
} else if (s == 'L') {
return "LIGHTBLUE";
} else if (s == 'M') {
return "VIOLET";
} else if (s == 'N') {
return "BROWN";
} else if (s == 'O') {
return "ORANGE";
} else if (s == 'P') {
return "PINK";
} else if (s == 'R') {
return "RED";
} else if (s == 'W') {
return "WHITE";
} else if (s == 'Y') {
return "YELLOW";
} else if (s == 'r') {
return Integer.toString(fontColor.getRGB() & 0x00ffffff, 16);
} else {
return "BLACK";
}
}
private static boolean isNumber(int character) {
return character >= '0' && character <= '9';
}
private static boolean isImage(String s) {
return s.endsWith(".gif") | s.endsWith(".png") | s.endsWith(".jpg");
}
public static String parseColor(String input) {
Pattern p = Pattern.compile("(\\d{1,3}),(\\d{1,3}),(\\d{1,3})");
Matcher matcher = p.matcher(input);
if (matcher.find()) {
String colors = matcher.group();
int c1 = Integer.parseInt(colors.split(",")[0]);
int c2 = Integer.parseInt(colors.split(",")[1]);
int c3 = Integer.parseInt(colors.split(",")[2]);
return Integer.toString((new Color(c1, c2, c3)).getRGB() & 0xffffff, 16);
}
return null;
}
}
mfg uncopyable
-
03.08.2012, 21:48 #2
KCodeParser (KCode to HTML)
Du musst die Farben vom Channel übergeben, sonst weiß dein Script nicht was es bei BB oder RR machen soll, und die Farben aller Links °>Nick|/w "|/serverpp "<° falsch darstellen würde.
Java:
Spoiler:
Lustige Quotes:
Spoiler:
Ähnliche Themen
-
[eBook] HTML Seminar - HTML für erfolgsorientierte
Von DMW007 im Forum eBooksAntworten: 0Letzter Beitrag: 14.10.2012, 20:07 -
KCode Painting (?)
Von Badboy12 im Forum Knuddels ProgrammierungAntworten: 2Letzter Beitrag: 28.06.2012, 19:34 -
KCodeParser (KCode to HTML)
Von uncopyable im Forum SourcecodeAntworten: 1Letzter Beitrag: 29.05.2012, 01:43 -
[PHP] HTML Crawlbot
Von Live0x00 im Forum ShowroomAntworten: 4Letzter Beitrag: 01.12.2011, 20:09 -
[Java] KCodeParser
Von Flav im Forum SourcecodeAntworten: 0Letzter Beitrag: 02.04.2011, 17:44
Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.