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 1156dee..b7f6156 100644
--- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPSourceViewerConfiguration.java
+++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPSourceViewerConfiguration.java
@@ -14,7 +14,15 @@ package net.sourceforge.phpeclipse.phpeditor;
import java.util.Vector;
import net.sourceforge.phpdt.internal.ui.text.ContentAssistPreference;
+import net.sourceforge.phpdt.internal.ui.text.HTMLTextPresenter;
+import net.sourceforge.phpdt.internal.ui.text.JavaElementProvider;
+import net.sourceforge.phpdt.internal.ui.text.JavaOutlineInformationControl;
+import net.sourceforge.phpdt.internal.ui.text.JavaReconciler;
+import net.sourceforge.phpdt.internal.ui.text.PHPAnnotationHover;
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.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.JavaTextTools;
@@ -29,12 +37,17 @@ 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;
+import org.eclipse.jface.text.DefaultInformationControl;
import org.eclipse.jface.text.IAutoIndentStrategy;
import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.IInformationControl;
+import org.eclipse.jface.text.IInformationControlCreator;
import org.eclipse.jface.text.ITextDoubleClickStrategy;
import org.eclipse.jface.text.ITextHover;
+import org.eclipse.jface.text.ITextViewerExtension2;
import org.eclipse.jface.text.TextAttribute;
import org.eclipse.jface.text.contentassist.ContentAssistant;
import org.eclipse.jface.text.contentassist.IContentAssistProcessor;
@@ -42,8 +55,12 @@ import org.eclipse.jface.text.contentassist.IContentAssistant;
import org.eclipse.jface.text.formatter.ContentFormatter;
import org.eclipse.jface.text.formatter.IContentFormatter;
import org.eclipse.jface.text.formatter.IFormattingStrategy;
+import org.eclipse.jface.text.information.IInformationPresenter;
+import org.eclipse.jface.text.information.IInformationProvider;
+import org.eclipse.jface.text.information.InformationPresenter;
import org.eclipse.jface.text.presentation.IPresentationReconciler;
import org.eclipse.jface.text.presentation.PresentationReconciler;
+import org.eclipse.jface.text.reconciler.IReconciler;
import org.eclipse.jface.text.rules.BufferedRuleBasedScanner;
import org.eclipse.jface.text.rules.DefaultDamagerRepairer;
import org.eclipse.jface.text.rules.DefaultPartitioner;
@@ -52,6 +69,9 @@ 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.swt.SWT;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IFileEditorInput;
/**
@@ -163,8 +183,14 @@ public class PHPSourceViewerConfiguration extends SourceViewerConfiguration {
return PHPeclipsePlugin.getDefault().getPreferenceStore();
}
- /* (non-Javadoc)
- * Method declared on SourceViewerConfiguration
+ // /* (non-Javadoc)
+ // * Method declared on SourceViewerConfiguration
+ // */
+ // public IAnnotationHover getAnnotationHover(ISourceViewer sourceViewer) {
+ // return new PHPAnnotationHover();
+ // }
+ /*
+ * @see SourceViewerConfiguration#getAnnotationHover(ISourceViewer)
*/
public IAnnotationHover getAnnotationHover(ISourceViewer sourceViewer) {
return new PHPAnnotationHover();
@@ -196,6 +222,102 @@ public class PHPSourceViewerConfiguration extends SourceViewerConfiguration {
}
/**
+ * Returns the Smarty source code scanner for this configuration.
+ *
+ * @return the Smarty source code scanner
+ */
+ protected RuleBasedScanner getSmartyScanner() {
+ return fJavaTextTools.getSmartyScanner();
+ }
+
+ /*
+ * @see SourceViewerConfiguration#getReconciler(ISourceViewer)
+ */
+ public IReconciler getReconciler(ISourceViewer sourceViewer) {
+
+ if (getEditor() != null && getEditor().isEditable()) {
+ JavaReconciler reconciler = new JavaReconciler(getEditor(), new JavaReconcilingStrategy(getEditor()), false);
+ reconciler.setProgressMonitor(new NullProgressMonitor());
+ reconciler.setDelay(500);
+ return reconciler;
+ }
+
+ return null;
+ }
+
+ /*
+ * @see SourceViewerConfiguration#getConfiguredTextHoverStateMasks(ISourceViewer, String)
+ * @since 2.1
+ */
+ public int[] getConfiguredTextHoverStateMasks(ISourceViewer sourceViewer, String contentType) {
+ JavaEditorTextHoverDescriptor[] hoverDescs = PHPeclipsePlugin.getDefault().getJavaEditorTextHoverDescriptors();
+ int stateMasks[] = new int[hoverDescs.length];
+ int stateMasksLength = 0;
+ for (int i = 0; i < hoverDescs.length; i++) {
+ if (hoverDescs[i].isEnabled()) {
+ int j = 0;
+ int stateMask = hoverDescs[i].getStateMask();
+ while (j < stateMasksLength) {
+ if (stateMasks[j] == stateMask)
+ break;
+ j++;
+ }
+ if (j == stateMasksLength)
+ stateMasks[stateMasksLength++] = stateMask;
+ }
+ }
+ if (stateMasksLength == hoverDescs.length)
+ return stateMasks;
+
+ int[] shortenedStateMasks = new int[stateMasksLength];
+ System.arraycopy(stateMasks, 0, shortenedStateMasks, 0, stateMasksLength);
+ return shortenedStateMasks;
+ }
+
+ /*
+ * @see SourceViewerConfiguration#getTextHover(ISourceViewer, String, int)
+ * @since 2.1
+ */
+ public ITextHover getTextHover(ISourceViewer sourceViewer, String contentType, int stateMask) {
+ JavaEditorTextHoverDescriptor[] hoverDescs = PHPeclipsePlugin.getDefault().getJavaEditorTextHoverDescriptors();
+ int i = 0;
+ while (i < hoverDescs.length) {
+ if (hoverDescs[i].isEnabled() && hoverDescs[i].getStateMask() == stateMask)
+ 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);
+ }
+
+ /*
+ * @see SourceViewerConfiguration#getTextHover(ISourceViewer, String)
+ */
+ public ITextHover getTextHover(ISourceViewer sourceViewer, String contentType) {
+ return getTextHover(sourceViewer, contentType, ITextViewerExtension2.DEFAULT_HOVER_STATE_MASK);
+ }
+
+ /**
+ * Returns the SmartyDoc source code scanner for this configuration.
+ *
+ * @return the SmartyDoc source code scanner
+ */
+ protected RuleBasedScanner getSmartyDocScanner() {
+ return fJavaTextTools.getSmartyDocScanner();
+ }
+
+ /**
* Returns the PHPDoc source code scanner for this configuration.
*
* @return the PHPDoc source code scanner
@@ -217,6 +339,8 @@ public class PHPSourceViewerConfiguration extends SourceViewerConfiguration {
IPHPPartitionScannerConstants.CSS_MULTILINE_COMMENT,
IPHPPartitionScannerConstants.JAVASCRIPT,
IPHPPartitionScannerConstants.JS_MULTILINE_COMMENT,
+ IPHPPartitionScannerConstants.SMARTY,
+ IPHPPartitionScannerConstants.SMARTY_MULTILINE_COMMENT,
IDocument.DEFAULT_CONTENT_TYPE };
}
@@ -234,6 +358,9 @@ public class PHPSourceViewerConfiguration extends SourceViewerConfiguration {
assistant.setContentAssistProcessor(processor, IPHPPartitionScannerConstants.CSS_MULTILINE_COMMENT);
assistant.setContentAssistProcessor(processor, IPHPPartitionScannerConstants.JAVASCRIPT);
assistant.setContentAssistProcessor(processor, IPHPPartitionScannerConstants.JS_MULTILINE_COMMENT);
+ // TODO define special smarty partition content assist
+ assistant.setContentAssistProcessor(processor, IPHPPartitionScannerConstants.SMARTY);
+ assistant.setContentAssistProcessor(processor, IPHPPartitionScannerConstants.SMARTY_MULTILINE_COMMENT);
assistant.setContentAssistProcessor(new PHPCompletionProcessor(), IPHPPartitionScannerConstants.PHP);
@@ -343,6 +470,15 @@ public class PHPSourceViewerConfiguration extends SourceViewerConfiguration {
dr = new DefaultDamagerRepairer(getHTMLScanner());
reconciler.setDamager(dr, IPHPPartitionScannerConstants.JS_MULTILINE_COMMENT);
reconciler.setRepairer(dr, IPHPPartitionScannerConstants.JS_MULTILINE_COMMENT);
+
+ dr = new DefaultDamagerRepairer(getSmartyScanner());
+ reconciler.setDamager(dr, IPHPPartitionScannerConstants.SMARTY);
+ reconciler.setRepairer(dr, IPHPPartitionScannerConstants.SMARTY);
+
+ dr = new DefaultDamagerRepairer(getSmartyDocScanner());
+ reconciler.setDamager(dr, IPHPPartitionScannerConstants.SMARTY_MULTILINE_COMMENT);
+ reconciler.setRepairer(dr, IPHPPartitionScannerConstants.SMARTY_MULTILINE_COMMENT);
+
dr =
new DefaultDamagerRepairer(
new SingleTokenScanner(new TextAttribute(fJavaTextTools.getColorManager().getColor(PHPColorProvider.MULTI_LINE_COMMENT))));
@@ -370,13 +506,104 @@ public class PHPSourceViewerConfiguration extends SourceViewerConfiguration {
/* (non-Javadoc)
* Method declared on SourceViewerConfiguration
*/
- public ITextHover getTextHover(ISourceViewer sourceViewer, String contentType) {
- try {
- IFile f = ((IFileEditorInput) fEditor.getEditorInput()).getFile();
- return new PHPTextHover(f.getProject());
- } catch (NullPointerException e) {
- // this exception occurs, if getTextHover is called by preference pages !
- }
- return new PHPTextHover(null);
+ // public ITextHover getTextHover(ISourceViewer sourceViewer, String contentType) {
+ // 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#getInformationControlCreator(ISourceViewer)
+ * @since 2.0
+ */
+ public IInformationControlCreator getInformationControlCreator(ISourceViewer sourceViewer) {
+ return new IInformationControlCreator() {
+ public IInformationControl createInformationControl(Shell parent) {
+ return new DefaultInformationControl(parent, SWT.NONE, new HTMLTextPresenter(true));
+ // return new HoverBrowserControl(parent);
+ }
+ };
+ }
+
+ /*
+ * @see SourceViewerConfiguration#getInformationPresenter(ISourceViewer)
+ * @since 2.0
+ */
+ // public IInformationPresenter getInformationPresenter(ISourceViewer sourceViewer) {
+ // InformationPresenter presenter= new InformationPresenter(getInformationPresenterControlCreator(sourceViewer));
+ // IInformationProvider provider= new JavaInformationProvider(getEditor());
+ // presenter.setInformationProvider(provider, IDocument.DEFAULT_CONTENT_TYPE);
+ // presenter.setInformationProvider(provider, IJavaPartitions.JAVA_DOC);
+ // presenter.setSizeConstraints(60, 10, true, true);
+ // return presenter;
+ // }
+
+ /**
+ * Returns the information presenter control creator. The creator is a factory creating the
+ * presenter controls for the given source viewer. This implementation always returns a creator
+ * for DefaultInformationControl
instances.
+ *
+ * @param sourceViewer the source viewer to be configured by this configuration
+ * @return an information control creator
+ * @since 2.1
+ */
+ private IInformationControlCreator getInformationPresenterControlCreator(ISourceViewer sourceViewer) {
+ return new IInformationControlCreator() {
+ public IInformationControl createInformationControl(Shell parent) {
+ int shellStyle = SWT.RESIZE;
+ int style = SWT.V_SCROLL | SWT.H_SCROLL;
+ return new DefaultInformationControl(parent, shellStyle, style, new HTMLTextPresenter(false));
+ // return new HoverBrowserControl(parent);
+ }
+ };
+ }
+ /**
+ * Returns the outline presenter control creator. The creator is a factory creating outline
+ * presenter controls for the given source viewer. This implementation always returns a creator
+ * for JavaOutlineInformationControl
instances.
+ *
+ * @param sourceViewer the source viewer to be configured by this configuration
+ * @return an information control creator
+ * @since 2.1
+ */
+ private IInformationControlCreator getOutlinePresenterControlCreator(ISourceViewer sourceViewer) {
+ return new IInformationControlCreator() {
+ public IInformationControl createInformationControl(Shell parent) {
+ int shellStyle = SWT.RESIZE;
+ int treeStyle = SWT.V_SCROLL | SWT.H_SCROLL;
+ return new JavaOutlineInformationControl(parent, shellStyle, treeStyle);
+ }
+ };
+ }
+ /**
+ * Returns the outline presenter which will determine and shown
+ * information requested for the current cursor position.
+ *
+ * @param sourceViewer the source viewer to be configured by this configuration
+ * @param doCodeResolve a boolean which specifies whether code resolve should be used to compute the Java element
+ * @return an information presenter
+ * @since 2.1
+ */
+ public IInformationPresenter getOutlinePresenter(ISourceViewer sourceViewer, boolean doCodeResolve) {
+ InformationPresenter presenter = new InformationPresenter(getOutlinePresenterControlCreator(sourceViewer));
+ presenter.setAnchor(InformationPresenter.ANCHOR_GLOBAL);
+ IInformationProvider provider = new JavaElementProvider(getEditor(), doCodeResolve);
+ presenter.setInformationProvider(provider, IDocument.DEFAULT_CONTENT_TYPE);
+ presenter.setInformationProvider(provider, IPHPPartitionScannerConstants.PHP);
+ presenter.setInformationProvider(provider, IPHPPartitionScannerConstants.PHP_MULTILINE_COMMENT);
+ presenter.setInformationProvider(provider, IPHPPartitionScannerConstants.SMARTY_MULTILINE_COMMENT);
+ presenter.setInformationProvider(provider, IPHPPartitionScannerConstants.HTML);
+ presenter.setInformationProvider(provider, IPHPPartitionScannerConstants.HTML_MULTILINE_COMMENT);
+ presenter.setSizeConstraints(40, 20, true, false);
+ return presenter;
}
}