diff options
author | amywu | 2006-04-11 15:35:41 +0000 |
---|---|---|
committer | amywu | 2006-04-11 15:35:41 +0000 |
commit | 7c75943b642c5a608b0b1e707d24dcd9581a8947 (patch) | |
tree | 1c58b7e8a32eaf3254c47e5f8b880453ff2ed035 | |
parent | 0f25394fe18ba56be5a9f667a914d83a92644c89 (diff) | |
download | webtools.sourceediting-7c75943b642c5a608b0b1e707d24dcd9581a8947.tar.gz webtools.sourceediting-7c75943b642c5a608b0b1e707d24dcd9581a8947.tar.xz webtools.sourceediting-7c75943b642c5a608b0b1e707d24dcd9581a8947.zip |
[107647] [CSS Editor] Line delimiter setting ignored
7 files changed, 151 insertions, 31 deletions
diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/encoding/JSPDocumentLoader.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/encoding/JSPDocumentLoader.java index 8318040dd7..bc4edfb79e 100644 --- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/encoding/JSPDocumentLoader.java +++ b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/encoding/JSPDocumentLoader.java @@ -242,8 +242,11 @@ public class JSPDocumentLoader extends AbstractDocumentLoader { return parser; } - protected String getPreferredNewLineDelimiter() { - return ContentTypeEncodingPreferences.getPreferredNewLineDelimiter(ContentTypeIdForJSP.ContentTypeID_JSP); + protected String getPreferredNewLineDelimiter(IFile file) { + String delimiter = ContentTypeEncodingPreferences.getPreferredNewLineDelimiter(ContentTypeIdForJSP.ContentTypeID_JSP); + if (delimiter == null) + delimiter = super.getPreferredNewLineDelimiter(file); + return delimiter; } /** @@ -303,7 +306,7 @@ public class JSPDocumentLoader extends AbstractDocumentLoader { // before content is set in the model, so taglib initization can // take place. ((INodeNotifier) document).getAdapterFor(ModelQueryAdapter.class); - + } }
\ No newline at end of file diff --git a/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/encoding/CSSDocumentLoader.java b/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/encoding/CSSDocumentLoader.java index 20c49e17b0..3e412eb6df 100644 --- a/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/encoding/CSSDocumentLoader.java +++ b/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/encoding/CSSDocumentLoader.java @@ -11,6 +11,7 @@ package org.eclipse.wst.css.core.internal.encoding; +import org.eclipse.core.resources.IFile; import org.eclipse.jface.text.IDocumentPartitioner; import org.eclipse.wst.css.core.internal.contenttype.EncodingGuesser; import org.eclipse.wst.css.core.internal.parser.CSSSourceParser; @@ -65,8 +66,11 @@ public class CSSDocumentLoader extends AbstractDocumentLoader { return new CSSSourceParser(); } - protected String getPreferredNewLineDelimiter() { - return ContentTypeEncodingPreferences.getPreferredNewLineDelimiter(CSS_ID); + protected String getPreferredNewLineDelimiter(IFile file) { + String delimiter = ContentTypeEncodingPreferences.getPreferredNewLineDelimiter(CSS_ID); + if (delimiter == null) + delimiter = super.getPreferredNewLineDelimiter(file); + return delimiter; } public IDocumentCharsetDetector getDocumentEncodingDetector() { diff --git a/bundles/org.eclipse.wst.dtd.core/src/org/eclipse/wst/dtd/core/internal/encoding/DTDDocumentLoader.java b/bundles/org.eclipse.wst.dtd.core/src/org/eclipse/wst/dtd/core/internal/encoding/DTDDocumentLoader.java index 9ab8cc24ce..31bb2c5a05 100644 --- a/bundles/org.eclipse.wst.dtd.core/src/org/eclipse/wst/dtd/core/internal/encoding/DTDDocumentLoader.java +++ b/bundles/org.eclipse.wst.dtd.core/src/org/eclipse/wst/dtd/core/internal/encoding/DTDDocumentLoader.java @@ -12,13 +12,16 @@ *******************************************************************************/ package org.eclipse.wst.dtd.core.internal.encoding; +import org.eclipse.core.resources.IFile; import org.eclipse.jface.text.IDocumentPartitioner; import org.eclipse.wst.dtd.core.internal.parser.DTDRegionParser; +import org.eclipse.wst.dtd.core.internal.provisional.contenttype.ContentTypeIdForDTD; import org.eclipse.wst.dtd.core.internal.text.DTDStructuredDocumentReParser; import org.eclipse.wst.dtd.core.internal.text.StructuredTextPartitionerForDTD; import org.eclipse.wst.sse.core.internal.document.AbstractDocumentLoader; import org.eclipse.wst.sse.core.internal.document.IDocumentCharsetDetector; import org.eclipse.wst.sse.core.internal.document.StructuredDocumentFactory; +import org.eclipse.wst.sse.core.internal.encoding.ContentTypeEncodingPreferences; import org.eclipse.wst.sse.core.internal.ltk.parser.RegionParser; import org.eclipse.wst.sse.core.internal.provisional.document.IEncodedDocument; import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument; @@ -45,6 +48,13 @@ public final class DTDDocumentLoader extends AbstractDocumentLoader { public RegionParser getParser() { return new DTDRegionParser(); } + + protected String getPreferredNewLineDelimiter(IFile file) { + String delimiter = ContentTypeEncodingPreferences.getPreferredNewLineDelimiter(ContentTypeIdForDTD.ContentTypeID_DTD); + if (delimiter == null) + delimiter = super.getPreferredNewLineDelimiter(file); + return delimiter; + } protected String getSpecDefaultEncoding() { String enc = "UTF-8"; //$NON-NLS-1$ diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/encoding/HTMLDocumentLoader.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/encoding/HTMLDocumentLoader.java index 43a50a940c..5bd0a78185 100644 --- a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/encoding/HTMLDocumentLoader.java +++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/encoding/HTMLDocumentLoader.java @@ -13,6 +13,7 @@ package org.eclipse.wst.html.core.internal.encoding; import java.util.ArrayList; import java.util.List; +import org.eclipse.core.resources.IFile; import org.eclipse.jface.text.IDocumentPartitioner; import org.eclipse.wst.html.core.internal.contenttype.EncodingGuesser; import org.eclipse.wst.html.core.internal.document.HTMLDocumentTypeAdapterFactory; @@ -125,8 +126,11 @@ public class HTMLDocumentLoader extends AbstractDocumentLoader { return result; } - protected String getPreferredNewLineDelimiter() { - return ContentTypeEncodingPreferences.getPreferredNewLineDelimiter(ContentTypeIdForHTML.ContentTypeID_HTML); + protected String getPreferredNewLineDelimiter(IFile file) { + String delimiter = ContentTypeEncodingPreferences.getPreferredNewLineDelimiter(ContentTypeIdForHTML.ContentTypeID_HTML); + if (delimiter == null) + delimiter = super.getPreferredNewLineDelimiter(file); + return delimiter; } public IDocumentCharsetDetector getDocumentEncodingDetector() { diff --git a/bundles/org.eclipse.wst.sse.core/src/org/eclipse/wst/sse/core/internal/document/AbstractDocumentLoader.java b/bundles/org.eclipse.wst.sse.core/src/org/eclipse/wst/sse/core/internal/document/AbstractDocumentLoader.java index dda92ea047..e2298d6ed8 100644 --- a/bundles/org.eclipse.wst.sse.core/src/org/eclipse/wst/sse/core/internal/document/AbstractDocumentLoader.java +++ b/bundles/org.eclipse.wst.sse.core/src/org/eclipse/wst/sse/core/internal/document/AbstractDocumentLoader.java @@ -21,7 +21,11 @@ import java.nio.charset.MalformedInputException; import java.nio.charset.UnmappableCharacterException; import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.ProjectScope; import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.Platform; +import org.eclipse.core.runtime.preferences.IScopeContext; +import org.eclipse.core.runtime.preferences.InstanceScope; import org.eclipse.jface.text.Document; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.IDocumentExtension3; @@ -100,6 +104,10 @@ public abstract class AbstractDocumentLoader implements IDocumentLoader { String specDefaultCharset = getDocumentEncodingDetector().getSpecDefaultEncoding(); structuredDocument.setEncodingMemento(CodedIO.createEncodingMemento(charset, EncodingMemento.DEFAULTS_ASSUMED_FOR_EMPTY_INPUT, specDefaultCharset)); + String lineDelimiter = getPreferredNewLineDelimiter(null); + if (lineDelimiter != null) + structuredDocument.setPreferredLineDelimiter(lineDelimiter); + IDocumentPartitioner defaultPartitioner = getDefaultDocumentPartitioner(); if (structuredDocument instanceof IDocumentExtension3) { ((IDocumentExtension3) structuredDocument).setDocumentPartitioner(IStructuredPartitioning.DEFAULT_STRUCTURED_PARTITIONING, defaultPartitioner); @@ -118,6 +126,11 @@ public abstract class AbstractDocumentLoader implements IDocumentLoader { */ public IEncodedDocument createNewStructuredDocument(IFile iFile) throws IOException, CoreException { IEncodedDocument structuredDocument = createNewStructuredDocument(); + + String lineDelimiter = getPreferredNewLineDelimiter(iFile); + if (lineDelimiter != null) + structuredDocument.setPreferredLineDelimiter(lineDelimiter); + try { CodedReaderCreator creator = getCodedReaderCreator(); @@ -237,10 +250,39 @@ public abstract class AbstractDocumentLoader implements IDocumentLoader { } /** - * If subclass doesn't implement, return null + * Returns the default line delimiter preference for the given file. + * + * @param file + * the file + * @return the default line delimiter + * @since 3.1 + */ + private String getPlatformLineDelimiterPreference(IFile file) { + IScopeContext[] scopeContext; + if (file != null && file.getProject() != null) { + // project preference + scopeContext = new IScopeContext[]{new ProjectScope(file.getProject())}; + String lineDelimiter = Platform.getPreferencesService().getString(Platform.PI_RUNTIME, Platform.PREF_LINE_SEPARATOR, null, scopeContext); + if (lineDelimiter != null) + return lineDelimiter; + } + // workspace preference + scopeContext = new IScopeContext[]{new InstanceScope()}; + return Platform.getPreferencesService().getString(Platform.PI_RUNTIME, Platform.PREF_LINE_SEPARATOR, null, scopeContext); + } + + /** + * @deprecated use getPreferredNewLineDelimiter(IFile) instead */ protected String getPreferredNewLineDelimiter() { - return null; + return getPreferredNewLineDelimiter(null); + } + + /** + * If subclass doesn't implement, return platform default + */ + protected String getPreferredNewLineDelimiter(IFile file) { + return getPlatformLineDelimiterPreference(file); } /** @@ -264,7 +306,7 @@ public abstract class AbstractDocumentLoader implements IDocumentLoader { // based on text, make a guess on what's being used as // line delimiter String probableLineDelimiter = TextUtilities.determineLineDelimiter(originalString, theFlatModel.getLegalLineDelimiters(), System.getProperty("line.separator")); //$NON-NLS-1$ - String preferredLineDelimiter = getPreferredNewLineDelimiter(); + String preferredLineDelimiter = getPreferredNewLineDelimiter(null); if (preferredLineDelimiter == null) { // when preferredLineDelimiter is null, it means "leave alone" // so no conversion needed. diff --git a/bundles/org.eclipse.wst.sse.core/src/org/eclipse/wst/sse/core/internal/text/BasicStructuredDocument.java b/bundles/org.eclipse.wst.sse.core/src/org/eclipse/wst/sse/core/internal/text/BasicStructuredDocument.java index 5a3e195ff1..8b687bb2ad 100644 --- a/bundles/org.eclipse.wst.sse.core/src/org/eclipse/wst/sse/core/internal/text/BasicStructuredDocument.java +++ b/bundles/org.eclipse.wst.sse.core/src/org/eclipse/wst/sse/core/internal/text/BasicStructuredDocument.java @@ -1291,6 +1291,36 @@ public class BasicStructuredDocument implements IStructuredDocument, IDocumentEx throw new BadPartitioningException(); } + /* + * This method can be used when this class implements IDocumentExtension4. + * + * @see org.eclipse.jface.text.IDocumentExtension4#getDefaultLineDelimiter() + */ + private String getDefaultLineDelimiter() { + // specific preferred line delimiter + if (preferedDelimiter != null) + return preferedDelimiter; + + + // no line delimiter has been used so just use platform's default + String lineDelimiter = null; + String sysLineDelimiter = PlatformLineDelimiter; + String[] delimiters = getLegalLineDelimiters(); + Assert.isTrue(delimiters.length > 0); + for (int i = 0; i < delimiters.length; i++) { + if (delimiters[i].equals(sysLineDelimiter)) { + lineDelimiter = sysLineDelimiter; + break; + } + } + + // no platform default so just use first legal delimiter + if (lineDelimiter == null) + lineDelimiter = delimiters[0]; + + return lineDelimiter; + } + /** * Returns the document's partitioner. * @@ -1372,11 +1402,13 @@ public class BasicStructuredDocument implements IStructuredDocument, IDocumentEx return getStore().getLength(); } + /* + * (non-Javadoc) + * + * @see org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument#getLineDelimiter() + */ public String getLineDelimiter() { - if (preferedDelimiter == null) { - preferedDelimiter = PlatformLineDelimiter; - } - return preferedDelimiter; + return getDefaultLineDelimiter(); } /** @@ -1685,17 +1717,17 @@ public class BasicStructuredDocument implements IStructuredDocument, IDocumentEx * eg. * * <pre> - * <html>[<head></head>]</html> returns <head>,</head> + * <html>[<head></head>]</html> returns <head>,</head> * </pre> * <pre> - * <ht[ml><head></he]ad></html> returns <html>,<head>,</head> + * <ht[ml><head></he]ad></html> returns <html>,<head>,</head> * </pre> * * <pre> - * <html>[<head></head>]</html> returns <head>,</head> + * <html>[<head></head>]</html> returns <head>,</head> * </pre> * <pre> - * <ht[ml><head></he]ad></html> returns <html>,<head>,</head> + * <ht[ml><head></he]ad></html> returns <html>,<head>,</head> * </pre> * * </p> @@ -2446,15 +2478,12 @@ public class BasicStructuredDocument implements IStructuredDocument, IDocumentEx } - void setLastDocumentRegion(IStructuredDocumentRegion region) { - lastDocumentRegion = region; - - } - - /** - * @see IStructuredDocument#setLineDelimiter(String) + /* + * This method can be used when this class implements IDocumentExtension4. + * + * @see org.eclipse.jface.text.IDocumentExtension4#setInitialLineDelimiter(String) */ - public void setLineDelimiter(String delimiter) { + private void setInitialLineDelimiter(String delimiter) { // make sure our preferred delimiter is // one of the legal ones if (Utilities.containsString(getLegalLineDelimiters(), delimiter)) { @@ -2467,6 +2496,20 @@ public class BasicStructuredDocument implements IStructuredDocument, IDocumentEx } } + void setLastDocumentRegion(IStructuredDocumentRegion region) { + lastDocumentRegion = region; + + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument#setLineDelimiter(java.lang.String) + */ + public void setLineDelimiter(String delimiter) { + setInitialLineDelimiter(delimiter); + } + /** * Sets the document's line tracker. Must be called at the beginning of * the constructor. @@ -2509,7 +2552,7 @@ public class BasicStructuredDocument implements IStructuredDocument, IDocumentEx StructuredDocumentEvent result = null; result = replaceText(requester, 0, getLength(), theString, true); - + return result; } @@ -2621,12 +2664,22 @@ public class BasicStructuredDocument implements IStructuredDocument, IDocumentEx return result; } + /* + * (non-Javadoc) + * + * @see org.eclipse.wst.sse.core.internal.provisional.document.IEncodedDocument#getPreferredLineDelimiter() + */ public String getPreferredLineDelimiter() { - return getLineDelimiter(); + return getDefaultLineDelimiter(); } + /* + * (non-Javadoc) + * + * @see org.eclipse.wst.sse.core.internal.provisional.document.IEncodedDocument#setPreferredLineDelimiter(java.lang.String) + */ public void setPreferredLineDelimiter(String probableLineDelimiter) { - setLineDelimiter(probableLineDelimiter); + setInitialLineDelimiter(probableLineDelimiter); } } diff --git a/bundles/org.eclipse.wst.xml.core/src/org/eclipse/wst/xml/core/internal/encoding/XMLDocumentLoader.java b/bundles/org.eclipse.wst.xml.core/src/org/eclipse/wst/xml/core/internal/encoding/XMLDocumentLoader.java index 2c80b0155c..2b8dea80ac 100644 --- a/bundles/org.eclipse.wst.xml.core/src/org/eclipse/wst/xml/core/internal/encoding/XMLDocumentLoader.java +++ b/bundles/org.eclipse.wst.xml.core/src/org/eclipse/wst/xml/core/internal/encoding/XMLDocumentLoader.java @@ -12,6 +12,7 @@ *******************************************************************************/ package org.eclipse.wst.xml.core.internal.encoding; +import org.eclipse.core.resources.IFile; import org.eclipse.jface.text.IDocumentPartitioner; import org.eclipse.wst.sse.core.internal.document.AbstractDocumentLoader; import org.eclipse.wst.sse.core.internal.document.IDocumentCharsetDetector; @@ -53,8 +54,11 @@ public class XMLDocumentLoader extends AbstractDocumentLoader { return new XMLSourceParser(); } - protected String getPreferredNewLineDelimiter() { - return ContentTypeEncodingPreferences.getPreferredNewLineDelimiter(ContentTypeIdForXML.ContentTypeID_XML); + protected String getPreferredNewLineDelimiter(IFile file) { + String delimiter = ContentTypeEncodingPreferences.getPreferredNewLineDelimiter(ContentTypeIdForXML.ContentTypeID_XML); + if (delimiter == null) + delimiter = super.getPreferredNewLineDelimiter(file); + return delimiter; } protected String getSpecDefaultEncoding() { |