summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Schuster <theBohemian@gmx.net>2006-03-06 01:16:12 +0000
committerRobert Schuster <theBohemian@gmx.net>2006-03-06 01:16:12 +0000
commit5f231efdef8ad2665d902529b31d21b444566fd1 (patch)
treebea3de480275db8554fe3351a31f0f18f358a4d4
parent55af66a46a67ba3a88feaa2e2c4306b40e52b6fb (diff)
downloadclasspath-5f231efdef8ad2665d902529b31d21b444566fd1.tar.gz
Fixes PR 26194.
2006-03-06 Robert Schuster <robertschuster@fsfe.org> * javax/swing/text/PlainDocument.java: (insertUpdate): Extended if-expression, added code to generate another Element when newly inserted characters and old ones will be on the same line.
-rw-r--r--ChangeLog7
-rw-r--r--javax/swing/text/PlainDocument.java28
2 files changed, 27 insertions, 8 deletions
diff --git a/ChangeLog b/ChangeLog
index 12a434b11..bd7c818e3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2006-03-06 Robert Schuster <robertschuster@fsfe.org>
+
+ * javax/swing/text/PlainDocument.java:
+ (insertUpdate): Extended if-expression, added
+ code to generate another Element when newly inserted characters
+ and old ones will be on the same line.
+
2006-03-05 Robert Schuster <robertschuster@fsfe.org>
* javax/swing/text/GapContent.java:
diff --git a/javax/swing/text/PlainDocument.java b/javax/swing/text/PlainDocument.java
index 2200cae80..fd7ef92a0 100644
--- a/javax/swing/text/PlainDocument.java
+++ b/javax/swing/text/PlainDocument.java
@@ -110,17 +110,19 @@ public class PlainDocument extends AbstractDocument
{
int offset = event.getOffset();
int end = offset + event.getLength();
- int elementIndex = rootElement.getElementIndex(offset);
+ int oldElementIndex, elementIndex = rootElement.getElementIndex(offset);
Element firstElement = rootElement.getElement(elementIndex);
-
+ oldElementIndex = elementIndex;
+
// If we're inserting immediately after a newline we have to fix the
- // Element structure.
- if (offset > 0)
+ // Element structure (but only if we are dealing with a line which
+ // has not existed as Element before).
+ if (offset > 0 && firstElement.getStartOffset() != offset)
{
try
{
String s = getText(offset - 1, 1);
- if (s.equals("\n"))
+ if (s.equals("\n") )
{
int newEl2EndOffset = end;
boolean replaceNext = false;
@@ -166,26 +168,35 @@ public class PlainDocument extends AbstractDocument
// characters within the newly inserted text
int j = firstElement.getStartOffset();
int i = str.indexOf('\n', offset);
+
while (i != -1 && i <= end)
{
// For each new line, create a new element
elts.add(createLeafElement(rootElement, SimpleAttributeSet.EMPTY,
j, i + 1));
+
j = i + 1;
if (j >= str.length())
- break;
+ break;
i = str.indexOf('\n', j);
}
+
// If there were new lines added we have to add an ElementEdit to
// the DocumentEvent and we have to call rootElement.replace to
// insert the new lines
if (elts.size() != 0)
{
+ // If we have created new lines test whether there are remaining
+ // characters in firstElement after the inserted text and if so
+ // create a new element for them.
+ if (j < firstElement.getEndOffset())
+ elts.add(createLeafElement(rootElement, SimpleAttributeSet.EMPTY, j, firstElement.getEndOffset()));
+
// Set up the ElementEdit by filling the added and removed
// arrays with the proper Elements
added = new Element[elts.size()];
- for (int k = 0; k < elts.size(); ++k)
- added[k] = (Element) elts.get(k);
+ elts.toArray(added);
+
removed[0] = firstElement;
// Now create and add the ElementEdit
@@ -204,6 +215,7 @@ public class PlainDocument extends AbstractDocument
ae.initCause(e);
throw ae;
}
+
super.insertUpdate(event, attributes);
}