Changeset dcd6229473626901e04428944a3530f2492ded88
- Timestamp:
- 06/07/07 17:27:55 (1 year ago)
- git-parent:
- Files:
-
- src/META-INF/services/net.driftingsouls.ds2.server.framework.bbcode.BBCodeFunction (added)
- src/net/driftingsouls/ds2/server/bbcodes/TagIntrnlConfTask.java (added)
- src/net/driftingsouls/ds2/server/bbcodes/TagResource.java (added)
- src/net/driftingsouls/ds2/server/bbcodes/TagShipType.java (added)
- src/net/driftingsouls/ds2/server/framework/bbcode/BBCodeParser.java (modified) (3 diffs)
- src/net/driftingsouls/ds2/server/framework/bbcode/TagIntrnlConfTask.java (deleted)
- src/net/driftingsouls/ds2/server/framework/bbcode/TagResource.java (deleted)
- src/net/driftingsouls/ds2/server/framework/bbcode/TagShipType.java (deleted)
- src/net/driftingsouls/ds2/server/framework/xml/XMLUtils.java (modified) (1 diff)
- src/net/driftingsouls/ds2/server/modules/CommController.java (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
src/net/driftingsouls/ds2/server/framework/bbcode/BBCodeParser.java
r52bce2c rdcd6229 19 19 package net.driftingsouls.ds2.server.framework.bbcode; 20 20 21 import java.net.URL; 21 22 import java.util.Arrays; 23 import java.util.Enumeration; 22 24 import java.util.HashMap; 23 25 import java.util.HashSet; 24 26 import java.util.Map; 25 27 28 import javax.xml.parsers.DocumentBuilder; 29 import javax.xml.parsers.DocumentBuilderFactory; 30 31 import net.driftingsouls.ds2.server.framework.Common; 32 import net.driftingsouls.ds2.server.framework.Loggable; 33 import net.driftingsouls.ds2.server.framework.xml.XMLUtils; 34 35 import org.w3c.dom.Document; 36 import org.w3c.dom.Element; 37 import org.w3c.dom.Node; 38 import org.w3c.dom.NodeList; 39 26 40 /** 27 * Der BBCodeParser formatiert einen Text mittels BBCodes. Bei BBCodes41 * <p>Der BBCodeParser formatiert einen Text mittels BBCodes. Bei BBCodes 28 42 * handelt es sich um Tags in der Form [name]...[/name] oder [name] oder 29 * [name=parameter1,parameter2]...[/name] usw. 30 * Das Formatieren einzelner Tags kann dabei auch ueber Funktionen geschehen 31 * ({@link BBCodeFunction}). 43 * [name=parameter1,parameter2]...[/name] usw.</p> 44 * <p>Das Formatieren einzelner Tags kann dabei auch ueber Funktionen geschehen 45 * ({@link BBCodeFunction}).</p> 46 * <p>Der BBCodeParser erlaubt es neben den Framework-BBCodes auf eigene 47 * anwendungsspezifische BBCodes hinzuzufuegen. Diese muessen dazu in der 48 * Datei <code>META-INF/services/net.driftingsouls.ds2.server.framework.bbcode.BBCodeFunction</code> 49 * eingetragen werden. Zudem koennen zur Laufzeit weitere BBCodes registriert werden</p> 32 50 * 33 51 * @author Christopher Jung 34 52 * 35 53 */ 36 public class BBCodeParser {37 private static BBCodeParser instance = null; ;54 public class BBCodeParser implements Loggable { 55 private static BBCodeParser instance = null; 38 56 39 57 private Map<String,BBCodeFunction> replaceFunctions = new HashMap<String,BBCodeFunction>(); … … 42 60 private BBCodeParser() { 43 61 try { 62 // Framework-BBCodes registrieren 44 63 registerHandler( "url", 1, new TagURL() ); 45 64 registerHandler( "url", 2, new TagURL() ); … … 61 80 registerHandler( "align", 2, "<div style=\"text-align:$2\">$1</div>" ); 62 81 registerHandler( "mark", 2, "<span style=\"background-color:$2\">$1</span>" ); 63 registerHandler( "shiptype", 1, new TagShipType() );64 registerHandler( "resource", 3, new TagResource() );65 registerHandler( "resource", 2, new TagResource() );66 registerHandler( "userprofile", 2, "<a class=\"profile\" href=\"ds?module=userprofile&sess={{{__SESSID__}}}&user=$2\">$1</a>" );67 registerHandler( "userprofile", 3, "<a class=\"$3\" href=\"ds?module=userprofile&sess={{{__SESSID__}}}&user=$2\">$1</a>" );68 82 registerHandler( "hr", 0, "<hr style=\"height:1px; border:0px; background-color:#606060; color:#606060\" />" ); 69 83 registerHandler( "hide", 1, "" ); 84 85 // Weitere BBCodes aus META-INF/services/net.driftingsouls.ds2.server.framework.bbcode.BBCodeFunction lesen 86 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 87 DocumentBuilder builder = factory.newDocumentBuilder(); 88 89 ClassLoader loader = Thread.currentThread().getContextClassLoader(); 90 Enumeration<URL> resources = loader.getResources("META-INF/services/"+BBCodeFunction.class.getName()); 91 while( resources.hasMoreElements() ) { 92 URL elem = resources.nextElement(); 93 94 Document doc = builder.parse(elem.openStream()); 95 Element root = doc.getDocumentElement(); 96 NodeList bbcodes = root.getElementsByTagName("bbcode"); 97 for( int i=0; i < bbcodes.getLength(); i++ ) { 98 Element bbcode = (Element)bbcodes.item(i); 99 100 final String tag = bbcode.getAttribute("tag"); 101 final int params = Integer.parseInt(bbcode.getAttribute("params")); 102 103 if( bbcode.getAttribute("handler").length() == 0 ) { 104 String text = XMLUtils.firstChildOfType(bbcode, Node.CDATA_SECTION_NODE).getNodeValue(); 105 text = Common.trimLines(text).trim(); 106 registerHandler(tag, params, text); 107 } 108 else { 109 String cls = bbcode.getAttribute("handler"); 110 try { 111 Class<? extends BBCodeFunction> bbcodeCls = Class.forName(cls).asSubclass(BBCodeFunction.class); 112 registerHandler(tag, params, bbcodeCls.newInstance()); 113 } 114 catch( ClassNotFoundException e ) { 115 LOG.warn("Konnte BBCode "+tag+"("+params+") nicht laden. Handler-Klasse '"+cls+"' nicht vorhanden"); 116 } 117 } 118 } 119 } 70 120 } 71 121 catch( Exception e ) { src/net/driftingsouls/ds2/server/framework/xml/XMLUtils.java
r52fb569 rdcd6229 219 219 return null; 220 220 } 221 222 /** 223 * Gibt den ersten Knoten eines bestimmten Typs unterhalb eines Knotens zurueck. 224 * Wenn kein Knoten des Typs direkt unter dem angegebenen Knoten gefunden wird, so wird <code>null</code> 225 * zurueckgegeben. 226 * 227 * @param node Der Knoten unter dem gesucht werden soll 228 * @param type Der Typ des Knotens 229 * @return Der erste Knoten vom angegebenen Typ oder <code>null</code> 230 */ 231 public static Node firstChildOfType(Node node, short type) { 232 NodeList list = node.getChildNodes(); 233 for( int i=0; i < list.getLength(); i++ ) { 234 if( list.item(i).getNodeType() == type) { 235 return list.item(i); 236 } 237 } 238 239 return null; 240 } 221 241 } src/net/driftingsouls/ds2/server/modules/CommController.java
r3924571 rdcd6229 29 29 30 30 import net.driftingsouls.ds2.server.ContextCommon; 31 import net.driftingsouls.ds2.server.bbcodes.TagIntrnlConfTask; 31 32 import net.driftingsouls.ds2.server.comm.Ordner; 32 33 import net.driftingsouls.ds2.server.comm.PM; … … 39 40 import net.driftingsouls.ds2.server.framework.bbcode.BBCodeParser; 40 41 import net.driftingsouls.ds2.server.framework.bbcode.Smilie; 41 import net.driftingsouls.ds2.server.framework.bbcode.TagIntrnlConfTask;42 42 import net.driftingsouls.ds2.server.framework.db.Database; 43 43 import net.driftingsouls.ds2.server.framework.db.SQLQuery;
