--- /dev/null
+package com.hexidec.ekit.component;\r
+\r
+import javax.swing.text.html.HTMLDocument;\r
+import javax.swing.text.Element;\r
+import javax.swing.text.AttributeSet;\r
+import javax.swing.text.MutableAttributeSet;\r
+import javax.swing.text.AbstractDocument;\r
+import javax.swing.text.BadLocationException;\r
+import javax.swing.undo.UndoableEdit;\r
+import javax.swing.text.html.StyleSheet;\r
+import javax.swing.text.html.HTML;\r
+import javax.swing.text.AbstractDocument.BranchElement;\r
+import java.util.Enumeration;\r
+import javax.swing.event.DocumentEvent;\r
+import javax.swing.event.UndoableEditEvent;\r
+\r
+public class ExtendedHTMLDocument\r
+ extends HTMLDocument {\r
+\r
+ public ExtendedHTMLDocument() {\r
+\r
+ }\r
+\r
+ public ExtendedHTMLDocument(AbstractDocument.Content c, StyleSheet styles) {\r
+ super(c, styles);\r
+ }\r
+\r
+ public ExtendedHTMLDocument(StyleSheet styles) {\r
+ super(styles);\r
+ }\r
+\r
+//-------------------------------------------------------------------------------------\r
+\r
+\r
+/**\r
+ *\r
+ * Überschreibt die Attribute des Elements.\r
+ *\r
+ * @param e Element bei dem die Attribute geändert werden sollen\r
+ * @param a AttributeSet mit den neuen Attributen\r
+ * @param tag Angabe was für ein Tag das Element ist\r
+ */\r
+ public void replaceAttributes(Element e, AttributeSet a, HTML.Tag tag) {\r
+ if( (e != null) && (a != null)) {\r
+ try {\r
+ writeLock();\r
+ int start = e.getStartOffset();\r
+ DefaultDocumentEvent changes = new DefaultDocumentEvent(start,\r
+ e.getEndOffset() - start, DocumentEvent.EventType.CHANGE);\r
+ AttributeSet sCopy = a.copyAttributes();\r
+ changes.addEdit(new AttributeUndoableEdit(e, sCopy, false));\r
+ MutableAttributeSet attr = (MutableAttributeSet) e.getAttributes();\r
+ Enumeration aNames = attr.getAttributeNames();\r
+ Object value;\r
+ Object aName;\r
+ while (aNames.hasMoreElements()) {\r
+ aName = aNames.nextElement();\r
+ value = attr.getAttribute(aName);\r
+ if(value != null && !value.toString().equalsIgnoreCase(tag.toString())) {\r
+ attr.removeAttribute(aName);\r
+ }\r
+ }\r
+ attr.addAttributes(a);\r
+ changes.end();\r
+ fireChangedUpdate(changes);\r
+ fireUndoableEditUpdate(new UndoableEditEvent(this, changes));\r
+ }\r
+ finally {\r
+ writeUnlock();\r
+ }\r
+ }\r
+ }\r
+\r
+\r
+ public void removeElements(Element e, int index, int count) throws\r
+ BadLocationException {\r
+ writeLock();\r
+ int start = e.getElement(index).getStartOffset();\r
+ int end = e.getElement(index + count - 1).getEndOffset();\r
+ try {\r
+ Element[] removed = new Element[count];\r
+ Element[] added = new Element[0];\r
+ for (int counter = 0; counter < count; counter++) {\r
+ removed[counter] = e.getElement(counter + index);\r
+ }\r
+ DefaultDocumentEvent dde = new DefaultDocumentEvent(\r
+ start, end - start, DocumentEvent.EventType.REMOVE);\r
+ ( (AbstractDocument.BranchElement) e).replace(index, removed.length,\r
+ added);\r
+ dde.addEdit(new ElementEdit(e, index, removed, added));\r
+ UndoableEdit u = getContent().remove(start, end - start);\r
+ if(u != null) {\r
+ dde.addEdit(u);\r
+ }\r
+ postRemoveUpdate(dde);\r
+ dde.end();\r
+ fireRemoveUpdate(dde);\r
+ if(u != null) {\r
+ fireUndoableEditUpdate(new UndoableEditEvent(this, dde));\r
+ }\r
+ }\r
+ finally {\r
+ writeUnlock();\r
+ }\r
+ }\r
+}
\ No newline at end of file