Thema: KCodeParser (KCode to HTML)
- 
	08.05.2012, 14:03 #1 KCodeParser (KCode to HTML) KCodeParser (KCode to HTML)Hallo, hier mein KCodeParser. 
 
 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
 
 Bugs
 °R>Text|link<° Hier wird die Farbe nicht berücksichtigt °R°°>Text|link<° funktioniert.
 
 
 Das Snippet ist noch nicht perfekt und man kann es bestimmt noch besser/optimieren Verbesserungsvorschlag sind erwünscht!
 
 PHP-Code:
 package jchat.tools;
 
 
 import java.awt.Color;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
 
 /**
 *
 * @author uncopyable
 */
 public class KCodeParser {
 private static String fontColor ="BLACK";
 private static int fontSize = 12;
 private static StringBuilder code = new StringBuilder();
 private static String style;
 public KCodeParser(String fontColor,int fontSize){
 this.fontColor = fontColor;
 this.fontSize = fontSize;
 style = "<style type=\"text/css\">"
 + "body {"
 + "font-family:Arial;"
 + "font-size:"
 + fontSize
 + "px;"
 + "color:"
 + fontColor
 + ";";
 }
 public KCodeParser(){
 style = null;
 fontColor ="BLACK";
 fontSize = 12;
 }
 
 public static String parse(String text) {
 code = new StringBuilder(style);
 boolean escape = false;
 boolean bold = false;
 boolean italic = false;
 int b = 0;
 
 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 '\\':
 if (escape){
 code.append("\\");
 break;
 }
 break;
 
 case ':': // Smileys
 if (text.startsWith(":)", i) && (!escape)) {
 code.append("<img src=\"http://chat.knuddels.de/pics/sm_classic_00.gif\" alt=\":)\"/>");
 i += 1;
 }
 break;
 case '°':
 try {
 if (escape){
 code.append("°");
 break;
 }
 
 
 if (text.charAt(i + 1) == '°' && (!escape)) {
 String kcode = text.substring(i + 2);
 kcode = kcode.substring(0, kcode.indexOf('<'));
 if (kcode.split("\\|").length > 1){
 String href = kcode.split("\\|")[0];
 String a = kcode.split("\\|")[1];
 code.append("<a href=\"").append(a).append("\">").append(href).append("</a>");
 if (kcode.split("\\|").length > 2){
 //
 }
 }else {
 code.append("<a href=\"").append(kcode).append("\">").append(kcode).append("</a>");
 i += kcode.length() + 2;
 break;
 }
 i += kcode.length() + 2;
 
 
 break;
 }else if (isNumber(text.charAt(i + 1))) { // Schriftgröße
 String kcode = text.substring(i + 1);
 kcode = kcode.substring(0, kcode.indexOf('°'));
 if (kcode.isEmpty()){
 break;
 }
 code.append("<span style=\"font-size:").append(kcode).append("px\">");
 i += kcode.length() + 1;
 break;
 }else if (text.charAt(i + 2) == '°') { // Farbe
 String kcode = text.substring(i + 1);
 kcode = kcode.substring(0, kcode.indexOf('°'));
 if (kcode.isEmpty()){
 break;
 }
 code.append("<font color=\"").append(GetHtmlColor(kcode.charAt(0))).append("\">");
 
 i += kcode.length() + 1;
 }else if (text.charAt(i + 1) == '[' && (!escape)) {
 String kcode = text.substring(i + 1);
 kcode = kcode.substring(0, kcode.indexOf('°'));
 code.append("<font color=\"").append(parseColor(kcode)).append("\">");
 i += kcode.length() + 2;
 break;
 }else {
 String kcode = text.substring(i + 2);
 kcode = kcode.substring(0, kcode.indexOf('<'));
 if (kcode.split("\\|").length > 1){
 String href = kcode.split("\\|")[0];
 String a = kcode.split("\\|")[1];
 code.append("<a href=\"").append(a).append("\">").append(href).append("</a>");
 if (kcode.split("\\|").length > 2){
 //
 }
 }else {
 code.append("<a href=\"").append(kcode).append("\">").append(kcode).append("</a>");
 i += kcode.length() + 2;
 break;
 }
 i += kcode.length() + 2;
 
 
 break;
 }
 
 } catch (Exception ex) {
 
 }
 
 break;
 
 case '§':
 escape = false;
 bold = false;
 italic = false;
 code.append("<span style=\"font-size:").append(fontSize).append("px\">");
 break;
 case '_':
 if (escape){
 code.append("_");
 break;
 }
 if (bold){
 code.append("</b>");
 bold = false;
 break;
 }
 code.append("<b>");
 bold = !bold;
 break;
 
 
 case '"':
 if (escape){
 code.append("\"");
 break;
 }
 if (italic){
 code.append("</i>");
 break;
 }
 code.append("<i>");
 italic = !italic;
 break;
 case '#':
 if (escape){
 code.append("#");
 break;
 }
 code.append("<br>");
 break;
 default:
 code.append(ch);
 }
 if (ch == '\\') {
 code.append("");
 escape = true;
 }else {
 escape = false;
 }
 }
 return code.toString();
 }
 
 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 fontColor;
 } else {
 return "BLACK";
 }
 }
 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;
 }
 private static boolean isNumber(int character) {
 return character >= '0' && character <= '9';
 }
 
 
 }
    
 
 while( behappy() ) { code(); }
 
- 
	The Following 2 Users Say Thank You to uncopyable For This Useful Post:
 
- 
	29.05.2012, 01:43 #2 KCodeParser Version 1.2 KCodeParser Version 1.2Guten Morgen  
 
 hab mal am Parser weiter gearbeitet und die Bugs gefixt.
 Wie oben erwähnt, ist das Snippet noch nicht perfekt. Verbesserungsvorschläge sind auch hier erwünscht.
 
 - °R>Text|link<°
- °12>Text|link<°
- °>sm_01.gif<°
- °>_hJames|/serverpp \"<°
 
 
 Letze Änderung: Mittwoch, 30. Mai 2012 - kleine Schönheitskorrekturen
 
 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;
 }
 }
 Geändert von uncopyable (30.05.2012 um 18:26 Uhr) Grund: Schönheitskorrekturen    
 
 while( behappy() ) { code(); }
 
Ähnliche Themen
- 
  HTML EditorVon Shane im Forum HTMLAntworten: 5Letzter Beitrag: 21.10.2014, 21:04
- 
  [eBook] HTML Seminar - HTML für erfolgsorientierteVon 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
- 
  HTML Templates?Von x BoooM x im Forum HTMLAntworten: 1Letzter Beitrag: 28.01.2012, 17:11
- 
  HTML-EinführungVon Dost im Forum SkriptsprachenAntworten: 16Letzter Beitrag: 19.10.2011, 21:23
Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.
 
									 
														 
														 
				
				 
			 
					
					
					
						 Zitieren
  Zitieren