Most structures for DefaultStyledDocument are now correct. Mauve test
ElementStructure8 still fails because DefaultStyledDocument is still
not perfect for strings inserted with 2 or more fractures. The other
mauve tests pass :)
2006-02-01 Lillian Angel <[EMAIL PROTECTED]>
* javax/swing/text/DefaultStyledDocument.java
(insertParagraph): Cleaned up code.
(insertFirstContentTag): Fixed call to recreateLeaves.
(insertContentTag): Added check to code to determine where
content should be inserted with respect to next element.
(createFracture): Removed check, recreateLeaves is called in
other places when needed.
(recreateLeaves): Added new parameter for paragraph instead
of checking the stack. Removed editing for newBranch, replaced
with a replace call.
Index: javax/swing/text/DefaultStyledDocument.java
===================================================================
RCS file: /cvsroot/classpath/classpath/javax/swing/text/DefaultStyledDocument.java,v
retrieving revision 1.53
diff -u -r1.53 DefaultStyledDocument.java
--- javax/swing/text/DefaultStyledDocument.java 31 Jan 2006 21:13:50 -0000 1.53
+++ javax/swing/text/DefaultStyledDocument.java 1 Feb 2006 19:31:33 -0000
@@ -788,9 +788,9 @@
*/
private Element insertParagraph(BranchElement par, int offset)
{
- Element current = par.getElement(par.getElementIndex(offset));
- Element[] res = split(current, offset, 0, 0);
int index = par.getElementIndex(offset);
+ Element current = par.getElement(index);
+ Element[] res = split(current, offset, 0, 0);
Edit e = getEditForParagraphAndIndex(par, index + 1);
Element ret;
if (res[1] != null)
@@ -906,7 +906,7 @@
offset, newEndOffset);
edit.addAddedElement(newEl1);
if (current.getEndOffset() != endOffset)
- recreateLeaves(newEndOffset, data);
+ recreateLeaves(newEndOffset, paragraph, onlyContent);
else
offset = newEndOffset;
break;
@@ -968,19 +968,26 @@
}
}
}
- else if (!origParCreated || dir != ElementSpec.OriginateDirection)
+ else if (!origParCreated && dir == ElementSpec.OriginateDirection)
{
- // FIXME: insert TestTag4
int end = pos + len;
- Element leaf = createLeafElement(paragraph, tag.getAttributes(), pos, end);
- edit.addAddedElement(leaf);
-
- // recreate all others
- Element next = paragraph.getElement(index);
- if (next != null && next.isLeaf())
+ Element leaf = createLeafElement(paragraph, tag.getAttributes(), pos,
+ end);
+ if (pos > target.getStartOffset())
{
- recreateLeaves(end, new ElementSpec[] { tag });
- edit.addRemovedElement(next);
+ // put it after the target
+ edit = getEditForParagraphAndIndex(paragraph,
+ paragraph.getElementCount());
+ edit.addAddedElement(leaf);
+ recreateLeaves(end, (BranchElement) target, false);
+ }
+ else
+ {
+ // put it before the target
+ edit = getEditForParagraphAndIndex(paragraph, index);
+ edit.addAddedElement(leaf);
+ recreateLeaves(end, paragraph, true);
+ edit.addRemovedElement(target);
}
}
@@ -1006,10 +1013,7 @@
Element newEl1 = createLeafElement(paragraph, atts,
child.getStartOffset(), offset);
edit.addAddedElement(newEl1);
-
edit.addRemovedElement(child);
- if (child.getEndOffset() != endOffset)
- recreateLeaves(offset, data);
}
}
@@ -1018,16 +1022,16 @@
* has been inserted.
*
* @param start - where to start recreating from
- * @param data - the array of ElementSpecs
+ * @param paragraph - the paragraph to recreate
+ * @param onlyContent - true if this is the only content
*/
- private void recreateLeaves(int start, ElementSpec[] data)
+ private void recreateLeaves(int start, BranchElement paragraph, boolean onlyContent)
{
- BranchElement paragraph = (BranchElement) elementStack.peek();
int index = paragraph.getElementIndex(start);
Element child = paragraph.getElement(index);
AttributeSet atts = child.getAttributes();
- if (data.length > 1)
+ if (!onlyContent)
{
BranchElement newBranch = (BranchElement) createBranchElement(paragraph,
atts);
@@ -1041,16 +1045,17 @@
edit.addAddedElement(newBranch);
int paragraphSize = paragraph.getElementCount();
- int remove = paragraphSize - (index + 1);
- Element[] removed = new Element[remove];
+ Element[] removed = new Element[paragraphSize - (index + 1)];
int s = 0;
for (int j = index + 1; j < paragraphSize; j++)
removed[s++] = paragraph.getElement(j);
+
edit = getEditForParagraphAndIndex(paragraph, index);
edit.addRemovedElements(removed);
+
Element[] added = recreateAfterFracture(removed, newBranch, 0, child.getEndOffset());
- edit = getEditForParagraphAndIndex(newBranch, 1);
- edit.addAddedElements(added);
+ newBranch.replace(1, 0, added);
+
lastFractured = newLeaf;
offset = newBranch.getEndOffset();
}