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
Classpath-patches@gnu.org
http://lists.gnu.org/mailman/listinfo/classpath-patches

Reply via email to