1 package com
.hexidec
.ekit
.component
;
3 import javax
.swing
.text
.html
.HTMLDocument
;
4 import javax
.swing
.text
.Element
;
5 import javax
.swing
.text
.AttributeSet
;
6 import javax
.swing
.text
.MutableAttributeSet
;
7 import javax
.swing
.text
.AbstractDocument
;
8 import javax
.swing
.text
.BadLocationException
;
9 import javax
.swing
.undo
.UndoableEdit
;
10 import javax
.swing
.text
.html
.StyleSheet
;
11 import javax
.swing
.text
.html
.HTML
;
12 import javax
.swing
.text
.AbstractDocument
.BranchElement
;
13 import java
.util
.Enumeration
;
14 import javax
.swing
.event
.DocumentEvent
;
15 import javax
.swing
.event
.UndoableEditEvent
;
17 public class ExtendedHTMLDocument
18 extends HTMLDocument
{
20 public ExtendedHTMLDocument() {
24 public ExtendedHTMLDocument(AbstractDocument
.Content c
, StyleSheet styles
) {
28 public ExtendedHTMLDocument(StyleSheet styles
) {
32 //-------------------------------------------------------------------------------------
37 * Überschreibt die Attribute des Elements.
39 * @param e Element bei dem die Attribute geändert werden sollen
40 * @param a AttributeSet mit den neuen Attributen
41 * @param tag Angabe was für ein Tag das Element ist
43 public void replaceAttributes(Element e
, AttributeSet a
, HTML
.Tag tag
) {
44 if( (e
!= null
) && (a
!= null
)) {
47 int start
= e
.getStartOffset();
48 DefaultDocumentEvent changes
= new DefaultDocumentEvent(start
,
49 e
.getEndOffset() - start
, DocumentEvent
.EventType
.CHANGE
);
50 AttributeSet sCopy
= a
.copyAttributes();
51 changes
.addEdit(new AttributeUndoableEdit(e
, sCopy
, false
));
52 MutableAttributeSet attr
= (MutableAttributeSet
) e
.getAttributes();
53 Enumeration aNames
= attr
.getAttributeNames();
56 while (aNames
.hasMoreElements()) {
57 aName
= aNames
.nextElement();
58 value
= attr
.getAttribute(aName
);
59 if(value
!= null
&& !value
.toString().equalsIgnoreCase(tag
.toString())) {
60 attr
.removeAttribute(aName
);
63 attr
.addAttributes(a
);
65 fireChangedUpdate(changes
);
66 fireUndoableEditUpdate(new UndoableEditEvent(this, changes
));
75 public void removeElements(Element e
, int index
, int count
) throws
76 BadLocationException
{
78 int start
= e
.getElement(index
).getStartOffset();
79 int end
= e
.getElement(index
+ count
- 1).getEndOffset();
81 Element
[] removed
= new Element
[count
];
82 Element
[] added
= new Element
[0];
83 for (int counter
= 0; counter
< count
; counter
++) {
84 removed
[counter
] = e
.getElement(counter
+ index
);
86 DefaultDocumentEvent dde
= new DefaultDocumentEvent(
87 start
, end
- start
, DocumentEvent
.EventType
.REMOVE
);
88 ( (AbstractDocument
.BranchElement
) e
).replace(index
, removed
.length
,
90 dde
.addEdit(new ElementEdit(e
, index
, removed
, added
));
91 UndoableEdit u
= getContent().remove(start
, end
- start
);
95 postRemoveUpdate(dde
);
97 fireRemoveUpdate(dde
);
99 fireUndoableEditUpdate(new UndoableEditEvent(this, dde
));