This patch fixes more issues with the ElementBuffer.
2006-01-11 Anthony Balkissoon <[EMAIL PROTECTED]>
* javax/swing/text/DefaultStyledDocument.java:
(ElementBuffer.insertUpdate): Properly recreate Elements if the first
tag is an end tag. Avoid NPE by pushing the proper Element on to the
elementStack when there is a start tag with JoinNextDirection.
--Tony
Index: javax/swing/text/DefaultStyledDocument.java
===================================================================
RCS file: /cvsroot/classpath/classpath/javax/swing/text/DefaultStyledDocument.java,v
retrieving revision 1.29
diff -u -r1.29 DefaultStyledDocument.java
--- javax/swing/text/DefaultStyledDocument.java 11 Jan 2006 19:25:57 -0000 1.29
+++ javax/swing/text/DefaultStyledDocument.java 11 Jan 2006 20:04:00 -0000
@@ -785,18 +785,31 @@
if (data[0].getType() == ElementSpec.EndTagType)
{
// fracture deepest child here
- Element curr = getDefaultRootElement();
+ BranchElement paragraph = (BranchElement) elementStack.peek();
+ Element curr = paragraph.getParentElement();
int index = curr.getElementIndex(offset);
while (!curr.isLeaf())
{
index = curr.getElementIndex(offset);
curr = curr.getElement(index);
}
-
- Element newEl1 = createLeafElement(curr.getParentElement(),
+ Element parent = curr.getParentElement();
+ Element newEl1 = createLeafElement(parent,
curr.getAttributes(),
curr.getStartOffset(), offset);
- ((BranchElement) curr.getParentElement()).
+ Element grandParent = parent.getParentElement();
+ BranchElement nextBranch = (BranchElement) grandParent.getElement(grandParent.getElementIndex(parent.getEndOffset()));
+ Element firstLeaf = nextBranch.getElement(0);
+ while (!firstLeaf.isLeaf())
+ {
+ firstLeaf = firstLeaf.getElement(0);
+ }
+ BranchElement parent2 = (BranchElement) firstLeaf.getParentElement();
+ Element newEl2 = createLeafElement(parent2, firstLeaf.getAttributes(), offset, firstLeaf.getEndOffset());
+ parent2.replace(0, 1, new Element[] { newEl2 });
+
+
+ ((BranchElement) parent).
replace(index, 1, new Element[] { newEl1 });
}
@@ -812,9 +825,8 @@
insertFracture(data[i]);
break;
case ElementSpec.JoinNextDirection:
- Element parent = paragraph.getParentElement();
- int index = parent.getElementIndex(offset);
- elementStack.push(parent.getElement(index + 1));
+ int index = paragraph.getElementIndex(offset);
+ elementStack.push(paragraph.getElement(index));
break;
case ElementSpec.OriginateDirection:
Element current = (Element) elementStack.peek();
_______________________________________________
Classpath-patches mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/classpath-patches