[124070] [editor] JSPX editor doesn't honor indent with spaces
diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/StructuredTextViewerConfigurationJSP.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/StructuredTextViewerConfigurationJSP.java
index 02d25e1..68b4cbf 100644
--- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/StructuredTextViewerConfigurationJSP.java
+++ b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/StructuredTextViewerConfigurationJSP.java
@@ -39,17 +39,16 @@
import org.eclipse.jst.jsp.ui.internal.autoedit.StructuredAutoEditStrategyJSPJava;
import org.eclipse.jst.jsp.ui.internal.contentassist.JSPStructuredContentAssistProcessor;
import org.eclipse.jst.jsp.ui.internal.format.FormattingStrategyJSPJava;
+import org.eclipse.jst.jsp.ui.internal.format.StructuredFormattingStrategyJSP;
import org.eclipse.jst.jsp.ui.internal.preferences.JSPUIPreferenceNames;
import org.eclipse.jst.jsp.ui.internal.style.LineStyleProviderForJSP;
import org.eclipse.jst.jsp.ui.internal.style.java.LineStyleProviderForJava;
import org.eclipse.jst.jsp.ui.internal.style.jspel.LineStyleProviderForJSPEL;
import org.eclipse.wst.css.core.text.ICSSPartitions;
-import org.eclipse.wst.html.core.internal.format.HTMLFormatProcessorImpl;
import org.eclipse.wst.html.core.internal.provisional.contenttype.ContentTypeIdForHTML;
import org.eclipse.wst.html.core.text.IHTMLPartitions;
import org.eclipse.wst.html.ui.StructuredTextViewerConfigurationHTML;
import org.eclipse.wst.sse.ui.StructuredTextViewerConfiguration;
-import org.eclipse.wst.sse.ui.internal.format.StructuredFormattingStrategy;
import org.eclipse.wst.sse.ui.internal.provisional.style.LineStyleProvider;
import org.eclipse.wst.xml.core.internal.provisional.contenttype.ContentTypeIdForXML;
import org.eclipse.wst.xml.core.text.IXMLPartitions;
@@ -212,7 +211,7 @@
formatter = new MultiPassContentFormatter(getConfiguredDocumentPartitioning(sourceViewer), IXMLPartitions.XML_DEFAULT);
MultiPassContentFormatter multiFormatter = (MultiPassContentFormatter) formatter;
- multiFormatter.setMasterStrategy(new StructuredFormattingStrategy(new HTMLFormatProcessorImpl()));
+ multiFormatter.setMasterStrategy(new StructuredFormattingStrategyJSP());
multiFormatter.setSlaveStrategy(new FormattingStrategyJSPJava(), IJSPPartitions.JSP_CONTENT_JAVA);
return formatter;
diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/JSPUIMessages.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/JSPUIMessages.java
index 3b5034e..f3887f5 100644
--- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/JSPUIMessages.java
+++ b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/JSPUIMessages.java
@@ -108,6 +108,7 @@
public static String JSPSourcePreferencePage_0;
public static String JSPSourcePreferencePage_1;
public static String JSPSourcePreferencePage_2;
+ public static String JSPSourcePreferencePage_format;
public static String JSPColorPage_jsp_content;
public static String JSPFilesPreferencePage_0;
public static String JSPFilesPreferencePage_1;
diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/JSPUIPluginResources.properties b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/JSPUIPluginResources.properties
index 23c103c..143ddb5 100644
--- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/JSPUIPluginResources.properties
+++ b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/JSPUIPluginResources.properties
@@ -86,6 +86,7 @@
JSPSourcePreferencePage_0=JSP Source preferences are based on the content within the JSP.
JSPSourcePreferencePage_1=See <a>''{0}''</a> for JSP with HTML content.
JSPSourcePreferencePage_2=See <a>''{0}''</a> for JSP with XML content.
+JSPSourcePreferencePage_format=&Format JSP XML documents as HTML
JSPColorPage_jsp_content=Scripting Elements
JSPFilesPreferencePage_0=Validating files
JSPFilesPreferencePage_1=Validate JSP fragments
diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/format/StructuredFormattingStrategyJSP.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/format/StructuredFormattingStrategyJSP.java
new file mode 100644
index 0000000..b931534
--- /dev/null
+++ b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/format/StructuredFormattingStrategyJSP.java
@@ -0,0 +1,91 @@
+/*******************************************************************************
+ * Copyright (c) 2012 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *
+ *******************************************************************************/
+package org.eclipse.jst.jsp.ui.internal.format;
+
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.formatter.ContextBasedFormattingStrategy;
+import org.eclipse.jface.text.formatter.FormattingContextProperties;
+import org.eclipse.jface.text.formatter.IFormattingContext;
+import org.eclipse.jst.jsp.ui.internal.JSPUIPlugin;
+import org.eclipse.jst.jsp.ui.internal.preferences.JSPUIPreferenceNames;
+import org.eclipse.wst.html.core.internal.format.HTMLFormatProcessorImpl;
+import org.eclipse.wst.sse.core.StructuredModelManager;
+import org.eclipse.wst.sse.ui.internal.format.StructuredFormattingStrategy;
+import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel;
+import org.eclipse.wst.xml.ui.internal.XMLFormattingStrategy;
+
+public class StructuredFormattingStrategyJSP extends ContextBasedFormattingStrategy {
+
+ private static final String XMLNS_ATTR = "xmlns:jsp"; //$NON-NLS-1$
+ private static final String NAMESPACE = "http://java.sun.com/JSP/Page"; //$NON-NLS-1$
+
+ private XMLFormattingStrategy xmlStrategy;
+ private ContextBasedFormattingStrategy htmlStrategy;
+
+ private IDocument fDocument;
+ private ContextBasedFormattingStrategy fStrategy;
+
+ public StructuredFormattingStrategyJSP() {
+ xmlStrategy = new XMLFormattingStrategy();
+ htmlStrategy = new StructuredFormattingStrategy(new HTMLFormatProcessorImpl());
+ }
+ public void formatterStarts(IFormattingContext context) {
+ super.formatterStarts(context);
+ fDocument = (IDocument) context.getProperty(FormattingContextProperties.CONTEXT_MEDIUM);
+ getFormattingStrategy().formatterStarts(context);
+ }
+
+ public void format() {
+ super.format();
+ getFormattingStrategy().format();
+ }
+
+ public void formatterStops() {
+ super.formatterStops();
+ getFormattingStrategy().formatterStops();
+ fDocument = null;
+ fStrategy = null;
+ }
+
+ protected ContextBasedFormattingStrategy getFormattingStrategy() {
+ IDOMModel model = null;
+
+ if(fStrategy != null)
+ return fStrategy;
+
+ if (fDocument == null || JSPUIPlugin.getInstance().getPreferenceStore().getBoolean(JSPUIPreferenceNames.USE_HTML_FORMATTER)) {
+ fStrategy = htmlStrategy;
+ }
+ else {
+ /* Always release the model */
+ model = (IDOMModel) StructuredModelManager.getModelManager().getExistingModelForRead(fDocument);
+ try {
+ String attr = null;
+
+ /* Check the xmlns:jsp attribute to determine if it is XML content */
+ if(model != null && model.getDocument() != null)
+ attr = model.getDocument().getDocumentElement().getAttribute(XMLNS_ATTR);
+
+ if(NAMESPACE.equals(attr))
+ fStrategy = xmlStrategy;
+ else
+ fStrategy = htmlStrategy;
+ }
+ finally {
+ if (model != null)
+ model.releaseFromRead();
+ }
+ }
+ return fStrategy;
+ }
+
+}
diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/preferences/JSPUIPreferenceInitializer.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/preferences/JSPUIPreferenceInitializer.java
index 286616a..4b5f60f 100644
--- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/preferences/JSPUIPreferenceInitializer.java
+++ b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/preferences/JSPUIPreferenceInitializer.java
@@ -112,6 +112,7 @@
"org.eclipse.wst.css.ui.proposalCategory.css");
store.setDefault(JSPUIPreferenceNames.AUTO_IMPORT_INSERT, true);
store.setDefault(JSPUIPreferenceNames.INSERT_SINGLE_SUGGESTION, true);
+ store.setDefault(JSPUIPreferenceNames.USE_HTML_FORMATTER, true);
}
}
diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/preferences/JSPUIPreferenceNames.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/preferences/JSPUIPreferenceNames.java
index 6586d4e..5c34ea9 100644
--- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/preferences/JSPUIPreferenceNames.java
+++ b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/preferences/JSPUIPreferenceNames.java
@@ -184,4 +184,10 @@
* </p>
*/
public static final String INSERT_SINGLE_SUGGESTION = "insertSingleSuggestion"; //$NON-NLS-1$
+
+ /**
+ * <p>preference key to store the option for using the HTML formatter with XML-syntax JSPs</p>
+ * <p>Value is of type <code>boolean</code></p>
+ */
+ public static final String USE_HTML_FORMATTER = "useHTMLFormatter"; //$NON-NLS-1$
}
diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/preferences/ui/JSPSourcePreferencePage.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/preferences/ui/JSPSourcePreferencePage.java
index 6176b4d..c252c9c 100644
--- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/preferences/ui/JSPSourcePreferencePage.java
+++ b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/preferences/ui/JSPSourcePreferencePage.java
@@ -11,11 +11,15 @@
package org.eclipse.jst.jsp.ui.internal.preferences.ui;
import org.eclipse.jface.layout.GridDataFactory;
+import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.jst.jsp.ui.internal.JSPUIMessages;
+import org.eclipse.jst.jsp.ui.internal.JSPUIPlugin;
+import org.eclipse.jst.jsp.ui.internal.preferences.JSPUIPreferenceNames;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
@@ -27,6 +31,8 @@
public class JSPSourcePreferencePage extends PreferencePage implements IWorkbenchPreferencePage {
+ private Button fFormatterButton;
+
public void init(IWorkbench workbench) {
// do nothing
}
@@ -57,6 +63,10 @@
data = new GridData(SWT.FILL, SWT.DEFAULT, true, false);
data.horizontalIndent = 5;
contentTypeArea.getControl().setLayoutData(data);
+ fFormatterButton = new Button(composite, SWT.CHECK);
+ fFormatterButton.setText(JSPUIMessages.JSPSourcePreferencePage_format);
+ fFormatterButton.setSelection(getPreferenceStore().getBoolean(JSPUIPreferenceNames.USE_HTML_FORMATTER));
+
return composite;
}
@@ -77,4 +87,22 @@
return composite;
}
+
+ protected IPreferenceStore doGetPreferenceStore() {
+ return JSPUIPlugin.getInstance().getPreferenceStore();
+ }
+
+ protected void performDefaults() {
+ if (fFormatterButton != null) {
+ fFormatterButton.setSelection(getPreferenceStore().getDefaultBoolean(JSPUIPreferenceNames.USE_HTML_FORMATTER));
+ }
+ super.performDefaults();
+ }
+
+ public boolean performOk() {
+ if (fFormatterButton != null) {
+ getPreferenceStore().setValue(JSPUIPreferenceNames.USE_HTML_FORMATTER, fFormatterButton.getSelection());
+ }
+ return super.performOk();
+ }
}
diff --git a/bundles/org.eclipse.wst.xml.core/src/org/eclipse/wst/xml/core/internal/formatter/DefaultXMLPartitionFormatter.java b/bundles/org.eclipse.wst.xml.core/src/org/eclipse/wst/xml/core/internal/formatter/DefaultXMLPartitionFormatter.java
index 9537d42..cc24cc4 100644
--- a/bundles/org.eclipse.wst.xml.core/src/org/eclipse/wst/xml/core/internal/formatter/DefaultXMLPartitionFormatter.java
+++ b/bundles/org.eclipse.wst.xml.core/src/org/eclipse/wst/xml/core/internal/formatter/DefaultXMLPartitionFormatter.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2007, 2011 IBM Corporation and others.
+ * Copyright (c) 2007, 2012 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -441,7 +441,7 @@
private DOMRegion formatRegion(TextEdit edit, Position formatRange, XMLFormattingConstraints parentConstraints, DOMRegion domRegion, IStructuredDocumentRegion previousRegion) {
IStructuredDocumentRegion currentRegion = domRegion.documentRegion;
String regionType = currentRegion.getType();
- if (DOMRegionContext.XML_TAG_NAME.equals(regionType)) {
+ if (DOMRegionContext.XML_TAG_NAME.equals(regionType) || "JSP_ROOT_TAG_NAME".equals(regionType) || "JSP_DIRECTIVE_NAME".equals(regionType)) {
ITextRegion textRegion = currentRegion.getFirstRegion();
String textRegionType = textRegion.getType();
if (DOMRegionContext.XML_TAG_OPEN.equals(textRegionType)) {