[578419] xml source rendering broken after search&replace \n

Change-Id: I67f3225478d8aee6a8986571648249c091dd3ee2
diff --git a/core/bundles/org.eclipse.wst.sse.core/META-INF/MANIFEST.MF b/core/bundles/org.eclipse.wst.sse.core/META-INF/MANIFEST.MF
index 98613df..9fafb55 100644
--- a/core/bundles/org.eclipse.wst.sse.core/META-INF/MANIFEST.MF
+++ b/core/bundles/org.eclipse.wst.sse.core/META-INF/MANIFEST.MF
@@ -1,8 +1,9 @@
 Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
+Automatic-Module-Name: org.eclipse.wst.sse.core
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.wst.sse.core; singleton:=true
-Bundle-Version: 1.2.900.qualifier
+Bundle-Version: 1.2.1000.qualifier
 Bundle-Activator: org.eclipse.wst.sse.core.internal.SSECorePlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
@@ -39,16 +40,16 @@
  org.eclipse.wst.sse.core.utils,
  org.eclipse.wst.sse.internal.contentproperties;x-friends:="org.eclipse.wst.dtd.core,org.eclipse.wst.dtd.ui,org.eclipse.wst.sse.ui,org.eclipse.wst.xml.core,org.eclipse.wst.xml.ui,org.eclipse.wst.xsd.core,org.eclipse.wst.xsd.ui"
 Require-Bundle: org.eclipse.core.resources;bundle-version="[3.13.0,4.0.0)",
- org.eclipse.text;bundle-version="[3.6.0,4.0.0)";visibility:=reexport,
- org.eclipse.core.jobs;bundle-version="[3.10.0,4.0.0)",
- org.eclipse.core.runtime;bundle-version="[3.14.0,4.0.0)",
+ org.eclipse.text;bundle-version="[3.12.0,4.0.0)";visibility:=reexport,
+ org.eclipse.core.jobs;bundle-version="[3.13.0,4.0.0)",
+ org.eclipse.core.runtime;bundle-version="[3.26.0,4.0.0)",
  org.eclipse.core.filebuffers;bundle-version="[3.6.0,4.0.0)",
  org.eclipse.wst.common.uriresolver;bundle-version="[1.2.300,2.0.0)",
  org.eclipse.emf.common;bundle-version="[2.14.0,3.0.0)",
  org.eclipse.wst.validation;bundle-version="[1.2.700,2.0.0)";resolution:=optional,
- org.eclipse.core.filesystem;bundle-version="[1.7.0,2.0.0)",
+ org.eclipse.core.filesystem;bundle-version="[1.9.0,2.0.0)",
  org.eclipse.core.expressions;bundle-version="[3.6.100,4.0.0)",
- org.eclipse.osgi.services;bundle-version="[3.7.0,4.0.0)",
+ org.eclipse.osgi.services;bundle-version="[3.11.0,4.0.0)",
  com.ibm.icu;bundle-version="72.1.0"
 Bundle-ActivationPolicy: lazy;exclude:="org.eclipse.wst.sse.core.internal.propertytester"
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
diff --git a/core/bundles/org.eclipse.wst.sse.core/pom.xml b/core/bundles/org.eclipse.wst.sse.core/pom.xml
index 1acee3c..1c717e6 100644
--- a/core/bundles/org.eclipse.wst.sse.core/pom.xml
+++ b/core/bundles/org.eclipse.wst.sse.core/pom.xml
@@ -21,7 +21,7 @@
 
   <groupId>org.eclipse.webtools.sourceediting</groupId>
   <artifactId>org.eclipse.wst.sse.core</artifactId>
-  <version>1.2.900-SNAPSHOT</version>
+  <version>1.2.1000-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
 
   <build>
diff --git a/core/bundles/org.eclipse.wst.sse.core/src/org/eclipse/wst/sse/core/internal/text/BasicStructuredDocument.java b/core/bundles/org.eclipse.wst.sse.core/src/org/eclipse/wst/sse/core/internal/text/BasicStructuredDocument.java
index 0f1d43a..ebd6dc9 100644
--- a/core/bundles/org.eclipse.wst.sse.core/src/org/eclipse/wst/sse/core/internal/text/BasicStructuredDocument.java
+++ b/core/bundles/org.eclipse.wst.sse.core/src/org/eclipse/wst/sse/core/internal/text/BasicStructuredDocument.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2020 IBM Corporation and others.
+ * Copyright (c) 2001, 2023 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
  * which accompanies this distribution, and is available at
@@ -58,6 +58,7 @@
 import org.eclipse.jface.text.ILineTrackerExtension;
 import org.eclipse.jface.text.IPositionUpdater;
 import org.eclipse.jface.text.IRegion;
+import org.eclipse.jface.text.IRepairableDocumentExtension;
 import org.eclipse.jface.text.ITextStore;
 import org.eclipse.jface.text.ITypedRegion;
 import org.eclipse.jface.text.Position;
@@ -90,7 +91,7 @@
 /**
  * The standard implementation of structured document.
  */
-public class BasicStructuredDocument implements IStructuredDocument, IDocumentExtension, IDocumentExtension3, IDocumentExtension4, CharSequence, IRegionComparible {
+public class BasicStructuredDocument implements IStructuredDocument, IDocumentExtension, IDocumentExtension3, IDocumentExtension4, CharSequence, IRegionComparible, IRepairableDocumentExtension {
 
 	/**
 	 * This ThreadLocal construct is used so each thread can maintain its only
@@ -2978,4 +2979,58 @@
 			});
 		}
 	}
+
+	@Override
+	public boolean isLineInformationRepairNeeded(int offset, int length, String text) throws BadLocationException {
+		if ((0 > offset) || (0 > length) || (offset + length > getLength()))
+			throw new BadLocationException();
+
+		return isLineInformationRepairNeeded(text) || isLineInformationRepairNeeded(get(offset, length));
+	}
+
+	/**
+	 * Checks whether the line information needs to be repaired.
+	 *
+	 * @param text the text to check
+	 * @return <code>true</code> if the line information must be repaired
+	 * @since 3.4
+	 */
+	private boolean isLineInformationRepairNeeded(String text) {
+		if (text == null)
+			return false;
+
+		int length= text.length();
+		if (length == 0)
+			return false;
+
+		int rIndex= text.indexOf('\r');
+		int nIndex= text.indexOf('\n');
+		if (rIndex == -1 && nIndex == -1)
+			return false;
+
+		if (rIndex > 0 && rIndex < length-1 && nIndex > 1 && rIndex < length-2)
+			return false;
+
+		String defaultLD= null;
+		try {
+			defaultLD= getLineDelimiter(0);
+		} catch (BadLocationException x) {
+			return true;
+		}
+
+		if (defaultLD == null)
+			return false;
+
+		defaultLD= getDefaultLineDelimiter();
+
+		if (defaultLD.length() == 1) {
+			if (rIndex != -1 && !"\r".equals(defaultLD)) //$NON-NLS-1$
+				return true;
+			if (nIndex != -1 && !"\n".equals(defaultLD)) //$NON-NLS-1$
+				return true;
+		} else if (defaultLD.length() == 2)
+			return rIndex == -1 || nIndex - rIndex != 1;
+
+		return false;
+	}
 }