summaryrefslogtreecommitdiffstats
path: root/libjava/classpath/javax/swing/text/PlainDocument.java
diff options
context:
space:
mode:
Diffstat (limited to 'libjava/classpath/javax/swing/text/PlainDocument.java')
-rw-r--r--libjava/classpath/javax/swing/text/PlainDocument.java40
1 files changed, 40 insertions, 0 deletions
diff --git a/libjava/classpath/javax/swing/text/PlainDocument.java b/libjava/classpath/javax/swing/text/PlainDocument.java
index 0c00a06ff25..2200cae80a0 100644
--- a/libjava/classpath/javax/swing/text/PlainDocument.java
+++ b/libjava/classpath/javax/swing/text/PlainDocument.java
@@ -113,6 +113,46 @@ public class PlainDocument extends AbstractDocument
int elementIndex = rootElement.getElementIndex(offset);
Element firstElement = rootElement.getElement(elementIndex);
+ // If we're inserting immediately after a newline we have to fix the
+ // Element structure.
+ if (offset > 0)
+ {
+ try
+ {
+ String s = getText(offset - 1, 1);
+ if (s.equals("\n"))
+ {
+ int newEl2EndOffset = end;
+ boolean replaceNext = false;
+ if (rootElement.getElementCount() > elementIndex + 1)
+ {
+ replaceNext = true;
+ newEl2EndOffset =
+ rootElement.getElement(elementIndex + 1).getEndOffset();
+ }
+ Element newEl1 =
+ createLeafElement(rootElement, firstElement.getAttributes(),
+ firstElement.getStartOffset(), offset);
+ Element newEl2 =
+ createLeafElement (rootElement, firstElement.getAttributes(),
+ offset, newEl2EndOffset);
+ if (replaceNext)
+ rootElement.replace(elementIndex, 2, new Element[] { newEl1, newEl2 });
+ else
+ rootElement.replace(elementIndex, 1, new Element[] { newEl1, newEl2 });
+ firstElement = newEl2;
+ elementIndex ++;
+ }
+ }
+ catch (BadLocationException ble)
+ {
+ // This shouldn't happen.
+ AssertionError ae = new AssertionError();
+ ae.initCause(ble);
+ throw ae;
+ }
+ }
+
// added and removed are Element arrays used to add an ElementEdit
// to the DocumentEvent if there were entire lines added or removed.
Element[] removed = new Element[1];
OpenPOWER on IntegriCloud