X-Git-Url: http://git.phpeclipse.com
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPSourceViewerConfiguration.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPSourceViewerConfiguration.java
index c870909..401ca2c 100644
--- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPSourceViewerConfiguration.java
+++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPSourceViewerConfiguration.java
@@ -11,29 +11,34 @@
**********************************************************************/
package net.sourceforge.phpeclipse.phpeditor;
import java.util.Vector;
+
+import net.sourceforge.phpdt.core.JavaCore;
+import net.sourceforge.phpdt.internal.ui.text.AbstractJavaScanner;
import net.sourceforge.phpdt.internal.ui.text.ContentAssistPreference;
import net.sourceforge.phpdt.internal.ui.text.HTMLTextPresenter;
+import net.sourceforge.phpdt.internal.ui.text.IPHPPartitions;
import net.sourceforge.phpdt.internal.ui.text.JavaAnnotationHover;
import net.sourceforge.phpdt.internal.ui.text.JavaElementProvider;
import net.sourceforge.phpdt.internal.ui.text.JavaOutlineInformationControl;
+import net.sourceforge.phpdt.internal.ui.text.JavaPresentationReconciler;
import net.sourceforge.phpdt.internal.ui.text.JavaReconciler;
import net.sourceforge.phpdt.internal.ui.text.java.JavaFormattingStrategy;
import net.sourceforge.phpdt.internal.ui.text.java.JavaReconcilingStrategy;
+import net.sourceforge.phpdt.internal.ui.text.java.JavaStringAutoIndentStrategy;
import net.sourceforge.phpdt.internal.ui.text.java.hover.JavaEditorTextHoverDescriptor;
import net.sourceforge.phpdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy;
import net.sourceforge.phpdt.internal.ui.text.phpdoc.PHPDocCompletionProcessor;
import net.sourceforge.phpdt.ui.PreferenceConstants;
+import net.sourceforge.phpdt.ui.text.IColorManager;
import net.sourceforge.phpdt.ui.text.JavaTextTools;
-import net.sourceforge.phpeclipse.PHPCore;
import net.sourceforge.phpeclipse.PHPeclipsePlugin;
import net.sourceforge.phpeclipse.phpeditor.html.HTMLFormattingStrategy;
import net.sourceforge.phpeclipse.phpeditor.php.HTMLCompletionProcessor;
-import net.sourceforge.phpeclipse.phpeditor.php.IPHPPartitionScannerConstants;
import net.sourceforge.phpeclipse.phpeditor.php.PHPAutoIndentStrategy;
import net.sourceforge.phpeclipse.phpeditor.php.PHPCompletionProcessor;
import net.sourceforge.phpeclipse.phpeditor.php.PHPDoubleClickSelector;
import net.sourceforge.phpeclipse.phpeditor.util.PHPColorProvider;
-import org.eclipse.core.resources.IFile;
+
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.text.DefaultAutoIndentStrategy;
@@ -66,10 +71,10 @@ import org.eclipse.jface.text.rules.Token;
import org.eclipse.jface.text.source.IAnnotationHover;
import org.eclipse.jface.text.source.ISourceViewer;
import org.eclipse.jface.text.source.SourceViewerConfiguration;
+import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.IEditorInput;
-import org.eclipse.ui.IFileEditorInput;
+import org.eclipse.ui.texteditor.ITextEditor;
/**
* Configuration for an SourceViewer
which shows PHP code.
*/
@@ -90,7 +95,7 @@ public class PHPSourceViewerConfiguration extends SourceViewerConfiguration {
// IPHPPartitionScannerConstants.HTML;
//IDocument.DEFAULT_CONTENT_TYPE;
private JavaTextTools fJavaTextTools;
- private PHPEditor fEditor;
+ private ITextEditor fTextEditor;
private ContentFormatter fFormatter;
private HTMLFormattingStrategy fFormattingStrategy;
/**
@@ -102,12 +107,78 @@ public class PHPSourceViewerConfiguration extends SourceViewerConfiguration {
}
};
/**
+ * The document partitioning.
+ * @since 3.0
+ */
+ private String fDocumentPartitioning;
+ /**
+ * The Java source code scanner
+ * @since 3.0
+ */
+ private AbstractJavaScanner fCodeScanner;
+ /**
+ * The Java multi-line comment scanner
+ * @since 3.0
+ */
+ private AbstractJavaScanner fMultilineCommentScanner;
+ /**
+ * The Java single-line comment scanner
+ * @since 3.0
+ */
+ private AbstractJavaScanner fSinglelineCommentScanner;
+ /**
+ * The Java string scanner
+ * @since 3.0
+ */
+ private AbstractJavaScanner fStringScanner;
+ /**
+ * The Javadoc scanner
+ * @since 3.0
+ */
+ private AbstractJavaScanner fJavaDocScanner;
+ /**
+ * The preference store, can be read-only
+ * @since 3.0
+ */
+ private IPreferenceStore fPreferenceStore;
+ /**
+ * The color manager
+ * @since 3.0
+ */
+ private IColorManager fColorManager;
+
+ /**
+ * Creates a new Java source viewer configuration for viewers in the given editor
+ * using the given preference store, the color manager and the specified document partitioning.
+ *
+ * Creates a Java source viewer configuration in the new setup without text tools. Clients are + * allowed to call {@link JavaSourceViewerConfiguration#handlePropertyChangeEvent(PropertyChangeEvent)} + * and disallowed to call {@link JavaSourceViewerConfiguration#getPreferenceStore()} on the resulting + * Java source viewer configuration. + *
+ * + * @param colorManager the color manager + * @param preferenceStore the preference store, can be read-only + * @param editor the editor in which the configured viewer(s) will reside + * @param partitioning the document partitioning for this configuration + * @since 3.0 + */ + public PHPSourceViewerConfiguration(IColorManager colorManager, IPreferenceStore preferenceStore, ITextEditor editor, String partitioning) { + fColorManager= colorManager; + fPreferenceStore= preferenceStore; + fTextEditor= editor; + fDocumentPartitioning= partitioning; + fJavaTextTools = PHPeclipsePlugin.getDefault().getJavaTextTools(); +// initializeScanners(); + } + + /** * Default constructor. */ public PHPSourceViewerConfiguration(JavaTextTools textTools, PHPEditor editor) { fJavaTextTools = textTools; - fEditor = editor; + fTextEditor = editor; } /* * @see SourceViewerConfiguration#getContentFormatter(ISourceViewer) @@ -163,8 +234,8 @@ public class PHPSourceViewerConfiguration extends SourceViewerConfiguration { // private String[] getPartitionManagingPositionCategories() { // return new String[] { DefaultPartitioner.CONTENT_TYPES_CATEGORY }; // } - public PHPEditor getEditor() { - return fEditor; + public ITextEditor getEditor() { + return fTextEditor; } /** * Returns the preference store used by this configuration to initialize @@ -202,7 +273,10 @@ public class PHPSourceViewerConfiguration extends SourceViewerConfiguration { */ public IAutoIndentStrategy getAutoIndentStrategy( ISourceViewer sourceViewer, String contentType) { - return (IPHPPartitionScannerConstants.PHP.equals(contentType) + if (IPHPPartitions.PHP_STRING_DQ.equals(contentType)) + return new JavaStringAutoIndentStrategy(getConfiguredDocumentPartitioning(sourceViewer)); + + return (IPHPPartitions.PHP_PARTITIONING.equals(contentType) ? new PHPAutoIndentStrategy() : new DefaultAutoIndentStrategy()); } @@ -289,19 +363,20 @@ public class PHPSourceViewerConfiguration extends SourceViewerConfiguration { return new JavaEditorTextHoverProxy(hoverDescs[i], getEditor()); i++; } - if (fEditor != null) { - IEditorInput editorInput = fEditor.getEditorInput(); - if (editorInput instanceof IFileEditorInput) { - try { - IFile f = ((IFileEditorInput) editorInput).getFile(); - return new PHPTextHover(f.getProject()); - } catch (NullPointerException e) { - // this exception occurs, if getTextHover is called by - // preference pages ! - } - } - } - return new PHPTextHover(null); + return null; +// if (fEditor != null) { +// IEditorInput editorInput = fEditor.getEditorInput(); +// if (editorInput instanceof IFileEditorInput) { +// try { +// IFile f = ((IFileEditorInput) editorInput).getFile(); +// return new PHPTextHover(f.getProject()); +// } catch (NullPointerException e) { +// // this exception occurs, if getTextHover is called by +// // preference pages ! +// } +// } +// } +// return new PHPTextHover(null); } /* * @see SourceViewerConfiguration#getTextHover(ISourceViewer, String) @@ -331,16 +406,16 @@ public class PHPSourceViewerConfiguration extends SourceViewerConfiguration { * (non-Javadoc) Method declared on SourceViewerConfiguration */ public String[] getConfiguredContentTypes(ISourceViewer sourceViewer) { - return new String[]{IPHPPartitionScannerConstants.HTML, - IPHPPartitionScannerConstants.HTML_MULTILINE_COMMENT, - IPHPPartitionScannerConstants.PHP, - IPHPPartitionScannerConstants.PHP_MULTILINE_COMMENT, - IPHPPartitionScannerConstants.CSS, - IPHPPartitionScannerConstants.CSS_MULTILINE_COMMENT, - IPHPPartitionScannerConstants.JAVASCRIPT, - IPHPPartitionScannerConstants.JS_MULTILINE_COMMENT, - IPHPPartitionScannerConstants.SMARTY, - IPHPPartitionScannerConstants.SMARTY_MULTILINE_COMMENT, + return new String[]{IPHPPartitions.HTML, + IPHPPartitions.HTML_MULTILINE_COMMENT, + IPHPPartitions.PHP_PARTITIONING, + IPHPPartitions.PHP_PHPDOC_COMMENT, + IPHPPartitions.CSS, + IPHPPartitions.CSS_MULTILINE_COMMENT, + IPHPPartitions.JAVASCRIPT, + IPHPPartitions.JS_MULTILINE_COMMENT, + IPHPPartitions.SMARTY, + IPHPPartitions.SMARTY_MULTILINE_COMMENT, IDocument.DEFAULT_CONTENT_TYPE}; } /* @@ -350,28 +425,28 @@ public class PHPSourceViewerConfiguration extends SourceViewerConfiguration { ContentAssistant assistant = new ContentAssistant(); IContentAssistProcessor processor = new HTMLCompletionProcessor(); assistant.setContentAssistProcessor(processor, - IPHPPartitionScannerConstants.HTML); + IPHPPartitions.HTML); assistant.setContentAssistProcessor(processor, - IPHPPartitionScannerConstants.HTML_MULTILINE_COMMENT); + IPHPPartitions.HTML_MULTILINE_COMMENT); assistant.setContentAssistProcessor(processor, IDocument.DEFAULT_CONTENT_TYPE); assistant.setContentAssistProcessor(processor, - IPHPPartitionScannerConstants.CSS); + IPHPPartitions.CSS); assistant.setContentAssistProcessor(processor, - IPHPPartitionScannerConstants.CSS_MULTILINE_COMMENT); + IPHPPartitions.CSS_MULTILINE_COMMENT); assistant.setContentAssistProcessor(processor, - IPHPPartitionScannerConstants.JAVASCRIPT); + IPHPPartitions.JAVASCRIPT); assistant.setContentAssistProcessor(processor, - IPHPPartitionScannerConstants.JS_MULTILINE_COMMENT); + IPHPPartitions.JS_MULTILINE_COMMENT); // TODO define special smarty partition content assist assistant.setContentAssistProcessor(processor, - IPHPPartitionScannerConstants.SMARTY); + IPHPPartitions.SMARTY); assistant.setContentAssistProcessor(processor, - IPHPPartitionScannerConstants.SMARTY_MULTILINE_COMMENT); - assistant.setContentAssistProcessor(new PHPCompletionProcessor(), - IPHPPartitionScannerConstants.PHP); + IPHPPartitions.SMARTY_MULTILINE_COMMENT); + assistant.setContentAssistProcessor(new PHPCompletionProcessor(getEditor()), + IPHPPartitions.PHP_PARTITIONING); assistant.setContentAssistProcessor(new PHPDocCompletionProcessor(), - IPHPPartitionScannerConstants.PHP_MULTILINE_COMMENT); + IPHPPartitions.PHP_PHPDOC_COMMENT); // assistant.enableAutoActivation(true); // assistant.setAutoActivationDelay(500); // assistant.setProposalPopupOrientation(ContentAssistant.PROPOSAL_OVERLAY); @@ -422,7 +497,7 @@ public class PHPSourceViewerConfiguration extends SourceViewerConfiguration { // prefix[0] is either '\t' or ' ' x tabWidth, depending on useSpaces final IPreferenceStore preferences = PHPeclipsePlugin.getDefault() .getPreferenceStore(); - int tabWidth = preferences.getInt(PHPCore.FORMATTER_TAB_SIZE); + int tabWidth = preferences.getInt(JavaCore.FORMATTER_TAB_SIZE); boolean useSpaces = getPreferenceStore().getBoolean(SPACES_FOR_TABS); for (int i = 0; i <= tabWidth; i++) { StringBuffer prefix = new StringBuffer(); @@ -451,52 +526,54 @@ public class PHPSourceViewerConfiguration extends SourceViewerConfiguration { // PHPEditorEnvironment.getPHPColorProvider(); // JavaColorManager provider = // PHPEditorEnvironment.getPHPColorProvider(); - PresentationReconciler reconciler = new PresentationReconciler(); + PresentationReconciler reconciler= new JavaPresentationReconciler(); + reconciler.setDocumentPartitioning(getConfiguredDocumentPartitioning(sourceViewer)); + DefaultDamagerRepairer dr = new DefaultDamagerRepairer(getHTMLScanner()); reconciler.setDamager(dr, IDocument.DEFAULT_CONTENT_TYPE); reconciler.setRepairer(dr, IDocument.DEFAULT_CONTENT_TYPE); dr = new DefaultDamagerRepairer(getHTMLScanner()); - reconciler.setDamager(dr, IPHPPartitionScannerConstants.HTML); - reconciler.setRepairer(dr, IPHPPartitionScannerConstants.HTML); + reconciler.setDamager(dr, IPHPPartitions.HTML); + reconciler.setRepairer(dr, IPHPPartitions.HTML); dr = new DefaultDamagerRepairer(getHTMLScanner()); - reconciler.setDamager(dr, IPHPPartitionScannerConstants.CSS); - reconciler.setRepairer(dr, IPHPPartitionScannerConstants.CSS); + reconciler.setDamager(dr, IPHPPartitions.CSS); + reconciler.setRepairer(dr, IPHPPartitions.CSS); dr = new DefaultDamagerRepairer(getHTMLScanner()); reconciler.setDamager(dr, - IPHPPartitionScannerConstants.CSS_MULTILINE_COMMENT); + IPHPPartitions.CSS_MULTILINE_COMMENT); reconciler.setRepairer(dr, - IPHPPartitionScannerConstants.CSS_MULTILINE_COMMENT); + IPHPPartitions.CSS_MULTILINE_COMMENT); dr = new DefaultDamagerRepairer(getHTMLScanner()); - reconciler.setDamager(dr, IPHPPartitionScannerConstants.JAVASCRIPT); - reconciler.setRepairer(dr, IPHPPartitionScannerConstants.JAVASCRIPT); + reconciler.setDamager(dr, IPHPPartitions.JAVASCRIPT); + reconciler.setRepairer(dr, IPHPPartitions.JAVASCRIPT); dr = new DefaultDamagerRepairer(getHTMLScanner()); reconciler.setDamager(dr, - IPHPPartitionScannerConstants.JS_MULTILINE_COMMENT); + IPHPPartitions.JS_MULTILINE_COMMENT); reconciler.setRepairer(dr, - IPHPPartitionScannerConstants.JS_MULTILINE_COMMENT); + IPHPPartitions.JS_MULTILINE_COMMENT); dr = new DefaultDamagerRepairer(getSmartyScanner()); - reconciler.setDamager(dr, IPHPPartitionScannerConstants.SMARTY); - reconciler.setRepairer(dr, IPHPPartitionScannerConstants.SMARTY); + reconciler.setDamager(dr, IPHPPartitions.SMARTY); + reconciler.setRepairer(dr, IPHPPartitions.SMARTY); dr = new DefaultDamagerRepairer(getSmartyDocScanner()); reconciler.setDamager(dr, - IPHPPartitionScannerConstants.SMARTY_MULTILINE_COMMENT); + IPHPPartitions.SMARTY_MULTILINE_COMMENT); reconciler.setRepairer(dr, - IPHPPartitionScannerConstants.SMARTY_MULTILINE_COMMENT); + IPHPPartitions.SMARTY_MULTILINE_COMMENT); dr = new DefaultDamagerRepairer(new SingleTokenScanner( new TextAttribute(fJavaTextTools.getColorManager().getColor( PHPColorProvider.MULTI_LINE_COMMENT)))); reconciler.setDamager(dr, - IPHPPartitionScannerConstants.HTML_MULTILINE_COMMENT); + IPHPPartitions.HTML_MULTILINE_COMMENT); reconciler.setRepairer(dr, - IPHPPartitionScannerConstants.HTML_MULTILINE_COMMENT); + IPHPPartitions.HTML_MULTILINE_COMMENT); dr = new DefaultDamagerRepairer(getCodeScanner()); - reconciler.setDamager(dr, IPHPPartitionScannerConstants.PHP); - reconciler.setRepairer(dr, IPHPPartitionScannerConstants.PHP); + reconciler.setDamager(dr, IPHPPartitions.PHP_PARTITIONING); + reconciler.setRepairer(dr, IPHPPartitions.PHP_PARTITIONING); dr = new DefaultDamagerRepairer(getPHPDocScanner()); reconciler.setDamager(dr, - IPHPPartitionScannerConstants.PHP_MULTILINE_COMMENT); + IPHPPartitions.PHP_PHPDOC_COMMENT); reconciler.setRepairer(dr, - IPHPPartitionScannerConstants.PHP_MULTILINE_COMMENT); + IPHPPartitions.PHP_PHPDOC_COMMENT); return reconciler; } /* @@ -620,15 +697,15 @@ public class PHPSourceViewerConfiguration extends SourceViewerConfiguration { presenter.setInformationProvider(provider, IDocument.DEFAULT_CONTENT_TYPE); presenter.setInformationProvider(provider, - IPHPPartitionScannerConstants.PHP); + IPHPPartitions.PHP_PARTITIONING); presenter.setInformationProvider(provider, - IPHPPartitionScannerConstants.PHP_MULTILINE_COMMENT); + IPHPPartitions.PHP_PHPDOC_COMMENT); presenter.setInformationProvider(provider, - IPHPPartitionScannerConstants.SMARTY_MULTILINE_COMMENT); + IPHPPartitions.SMARTY_MULTILINE_COMMENT); presenter.setInformationProvider(provider, - IPHPPartitionScannerConstants.HTML); + IPHPPartitions.HTML); presenter.setInformationProvider(provider, - IPHPPartitionScannerConstants.HTML_MULTILINE_COMMENT); + IPHPPartitions.HTML_MULTILINE_COMMENT); presenter.setSizeConstraints(40, 20, true, false); return presenter; }