Some simple improvements
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpdt / ui / text / PHPSourceViewerConfiguration.java
index 0dcaeed..d749720 100644 (file)
@@ -7,13 +7,14 @@
 
  Contributors:
  IBM Corporation - Initial implementation
- Klaus Hartlage - www.eclipseproject.de
+ www.phpeclipse.de
  **********************************************************************/
 package net.sourceforge.phpdt.ui.text;
 
 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;
@@ -25,22 +26,24 @@ import net.sourceforge.phpdt.internal.ui.text.JavaPresentationReconciler;
 import net.sourceforge.phpdt.internal.ui.text.JavaReconciler;
 import net.sourceforge.phpdt.internal.ui.text.PreferencesAdapter;
 import net.sourceforge.phpdt.internal.ui.text.java.JavaFormattingStrategy;
-import net.sourceforge.phpdt.internal.ui.text.java.JavaStringAutoIndentStrategy;
+import net.sourceforge.phpdt.internal.ui.text.java.JavaStringAutoIndentStrategyDQ;
+import net.sourceforge.phpdt.internal.ui.text.java.JavaStringAutoIndentStrategySQ;
 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.java.hover.JavaInformationProvider;
+import net.sourceforge.phpdt.internal.ui.text.phpdoc.JavaDocAutoIndentStrategy;
+import net.sourceforge.phpdt.internal.ui.text.phpdoc.PHPDocCodeScanner;
 import net.sourceforge.phpdt.internal.ui.text.phpdoc.PHPDocCompletionProcessor;
 import net.sourceforge.phpdt.ui.PreferenceConstants;
+import net.sourceforge.phpeclipse.IPreferenceConstants;
 import net.sourceforge.phpeclipse.PHPeclipsePlugin;
-import net.sourceforge.phpeclipse.phpeditor.PHPEditor;
-import net.sourceforge.phpeclipse.phpeditor.html.HTMLFormattingStrategy;
 import net.sourceforge.phpeclipse.phpeditor.php.HTMLCompletionProcessor;
 import net.sourceforge.phpeclipse.phpeditor.php.PHPAutoIndentStrategy;
+import net.sourceforge.phpeclipse.phpeditor.php.PHPCodeScanner;
 import net.sourceforge.phpeclipse.phpeditor.php.PHPCompletionProcessor;
 import net.sourceforge.phpeclipse.phpeditor.php.PHPDocumentPartitioner;
 import net.sourceforge.phpeclipse.phpeditor.php.PHPDoubleClickSelector;
 import net.sourceforge.phpeclipse.phpeditor.php.PHPPartitionScanner;
-import net.sourceforge.phpeclipse.phpeditor.util.PHPColorProvider;
 import net.sourceforge.phpeclipse.xml.ui.XMLPlugin;
 import net.sourceforge.phpeclipse.xml.ui.internal.text.XMLConfiguration;
 import net.sourceforge.phpeclipse.xml.ui.internal.text.XMLPartitionScanner;
@@ -94,14 +97,14 @@ import org.eclipse.ui.texteditor.ITextEditor;
 public class PHPSourceViewerConfiguration extends SourceViewerConfiguration {
   /**
    * Preference key used to look up display tab width.
-   * 
+   *
    * @since 2.0
    */
   public final static String PREFERENCE_TAB_WIDTH = PreferenceConstants.EDITOR_TAB_WIDTH;
 
   /**
    * Preference key for inserting spaces rather than tabs.
-   * 
+   *
    * @since 2.0
    */
   public final static String SPACES_FOR_TABS = PreferenceConstants.EDITOR_SPACES_FOR_TABS;
@@ -109,18 +112,18 @@ public class PHPSourceViewerConfiguration extends SourceViewerConfiguration {
   //  public static final String HTML_DEFAULT =
   // IPHPPartitionScannerConstants.HTML;
   //IDocument.DEFAULT_CONTENT_TYPE;
-  private JavaTextTools fJavaTextTools;
+//  private JavaTextTools fJavaTextTools;
 
   private ITextEditor fTextEditor;
+
   /**
-        * The document partitioning.
-        * @since 3.0
-        */
+   * The document partitioning.
+   *
+   * @since 3.0
+   */
   private String fDocumentPartitioning;
-       
-  private ContentFormatter fFormatter;
 
-  private HTMLFormattingStrategy fFormattingStrategy;
+  private ContentFormatter fFormatter;
 
   /**
    * Single token scanner.
@@ -133,62 +136,65 @@ public class PHPSourceViewerConfiguration extends SourceViewerConfiguration {
 
   /**
    * The document partitioning.
-   * 
+   *
+   * @since 3.0
+   */
+  //  private String fDocumentPartitioning;
+  /**
+   * The Java source code scanner
+   *
    * @since 3.0
    */
-//  private String fDocumentPartitioning;
+  private AbstractJavaScanner fCodeScanner;
 
-//  /**
-//   * 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 Java multi-line comment scanner
+   *
+   * @since 3.0
+   */
+  private AbstractJavaScanner fMultilineCommentScanner;
+
+  /**
+   * The Java single-line comment scanner
+   *
+   * @since 3.0
+   */
+  private AbstractJavaScanner fSinglelineCommentScanner;
+
+  /**
+   * The PHP double quoted string scanner
+   */
+  private AbstractJavaScanner fStringDQScanner;
+  /**
+   * The PHP single quoted string scanner
+   */
+  private AbstractJavaScanner fStringSQScanner;
+
+  /**
+   * 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;
 
   private XMLTextTools fXMLTextTools;
+
   private XMLConfiguration xmlConfiguration;
+
   /**
    * 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.
@@ -197,7 +203,7 @@ public class PHPSourceViewerConfiguration extends SourceViewerConfiguration {
    * {@link JavaSourceViewerConfiguration#handlePropertyChangeEvent(PropertyChangeEvent)}and disallowed to call
    * {@link JavaSourceViewerConfiguration#getPreferenceStore()}on the resulting Java source viewer configuration.
    * </p>
-   * 
+   *
    * @param colorManager
    *          the color manager
    * @param preferenceStore
@@ -214,29 +220,108 @@ public class PHPSourceViewerConfiguration extends SourceViewerConfiguration {
     fPreferenceStore = preferenceStore;
     fTextEditor = editor;
     fDocumentPartitioning = partitioning;
-    fJavaTextTools = PHPeclipsePlugin.getDefault().getJavaTextTools();
+    //    fJavaTextTools = PHPeclipsePlugin.getDefault().getJavaTextTools();
     fXMLTextTools = XMLPlugin.getDefault().getXMLTextTools();
     xmlConfiguration = new XMLConfiguration(fXMLTextTools);
+    fColorManager = colorManager;
+    fPreferenceStore = preferenceStore;
+    fTextEditor = editor;
+    fDocumentPartitioning = partitioning;
 
-    //         initializeScanners(); 
+    initializeScanners();
   }
 
   /**
-   * Default constructor.
+   * Creates a new Java source viewer configuration for viewers in the given editor using the given Java tools.
+   *
+   * @param tools
+   *          the Java text tools to be used
+   * @param editor
+   *          the editor in which the configured viewer(s) will reside
+   * @see JavaTextTools
+   * @deprecated As of 3.0, replaced by
+   *             {@link JavaSourceViewerConfiguration#JavaSourceViewerConfiguration(IColorManager, IPreferenceStore, ITextEditor, String)}
+   */
+  //  public PHPSourceViewerConfiguration(JavaTextTools tools, PHPEditor editor, String partitioning) {
+  //    fJavaTextTools = tools;
+  //    fColorManager = tools.getColorManager();
+  //    fPreferenceStore = createPreferenceStore();
+  //    fDocumentPartitioning = partitioning;
+  //    fCodeScanner = (AbstractJavaScanner) fJavaTextTools.getCodeScanner();
+  //    fMultilineCommentScanner = (AbstractJavaScanner) fJavaTextTools.getMultilineCommentScanner();
+  //    fSinglelineCommentScanner = (AbstractJavaScanner) fJavaTextTools.getSinglelineCommentScanner();
+  //    fStringDQScanner = (AbstractJavaScanner) fJavaTextTools.getStringScanner();
+  //    fJavaDocScanner = (AbstractJavaScanner) fJavaTextTools.getJavaDocScanner();
+  //    fTextEditor = editor;
+  //    fXMLTextTools = XMLPlugin.getDefault().getXMLTextTools();
+  //    xmlConfiguration = new XMLConfiguration(fXMLTextTools);
+  //  }
+  /**
+   * Returns the color manager for this configuration.
+   *
+   * @return the color manager
    */
-  public PHPSourceViewerConfiguration(JavaTextTools tools, PHPEditor editor, String partitioning) {   
-       fJavaTextTools= tools;
-       fColorManager= tools.getColorManager();
-       fPreferenceStore= createPreferenceStore();
-       fDocumentPartitioning = partitioning;
-//     fCodeScanner= (AbstractJavaScanner) fJavaTextTools.getCodeScanner();
-//     fMultilineCommentScanner= (AbstractJavaScanner) fJavaTextTools.getMultilineCommentScanner();
-//     fSinglelineCommentScanner= (AbstractJavaScanner) fJavaTextTools.getSinglelineCommentScanner();
-//     fStringScanner= (AbstractJavaScanner) fJavaTextTools.getStringScanner();
-//     fJavaDocScanner= (AbstractJavaScanner) fJavaTextTools.getJavaDocScanner();
-       fTextEditor= editor;
-    fXMLTextTools = XMLPlugin.getDefault().getXMLTextTools();
-    xmlConfiguration = new XMLConfiguration(fXMLTextTools);
+  protected IColorManager getColorManager() {
+    return fColorManager;
+  }
+
+  /**
+   * Initializes the scanners.
+   *
+   * @since 3.0
+   */
+  private void initializeScanners() {
+//    Assert.isTrue(isNewSetup());
+    fCodeScanner = new PHPCodeScanner(getColorManager(), fPreferenceStore);
+    fMultilineCommentScanner = new SingleTokenPHPScanner(getColorManager(), fPreferenceStore,
+        IPreferenceConstants.PHP_MULTILINE_COMMENT);
+    fSinglelineCommentScanner = new SingleTokenPHPScanner(getColorManager(), fPreferenceStore,
+        IPreferenceConstants.PHP_SINGLELINE_COMMENT);
+//    fStringDQScanner = new SingleTokenPHPScanner(getColorManager(), fPreferenceStore, IPreferenceConstants.PHP_STRING_DQ);
+    fStringDQScanner = new PHPStringDQCodeScanner(getColorManager(), fPreferenceStore);
+    fStringSQScanner = new SingleTokenPHPScanner(getColorManager(), fPreferenceStore, IPreferenceConstants.PHP_STRING_SQ);
+    fJavaDocScanner = new PHPDocCodeScanner(getColorManager(), fPreferenceStore);
+  }
+
+  /**
+   * Determines whether the preference change encoded by the given event changes the behavior of one of its contained components.
+   *
+   * @param event
+   *          the event to be investigated
+   * @return <code>true</code> if event causes a behavioral change
+   * @since 3.0
+   */
+  public boolean affectsTextPresentation(PropertyChangeEvent event) {
+    return fCodeScanner.affectsBehavior(event) || fMultilineCommentScanner.affectsBehavior(event)
+        || fSinglelineCommentScanner.affectsBehavior(event) || fStringDQScanner.affectsBehavior(event)|| fStringSQScanner.affectsBehavior(event)
+        || fJavaDocScanner.affectsBehavior(event);
+  }
+
+  /**
+   * Adapts the behavior of the contained components to the change encoded in the given event.
+   * <p>
+   * Clients are not allowed to call this method if the old setup with text tools is in use.
+   * </p>
+   *
+   * @param event
+   *          the event to which to adapt
+   * @see JavaSourceViewerConfiguration#JavaSourceViewerConfiguration(IColorManager, IPreferenceStore, ITextEditor, String)
+   * @since 3.0
+   */
+  public void handlePropertyChangeEvent(PropertyChangeEvent event) {
+//    Assert.isTrue(isNewSetup());
+    if (fCodeScanner.affectsBehavior(event))
+      fCodeScanner.adaptToPreferenceChange(event);
+    if (fMultilineCommentScanner.affectsBehavior(event))
+      fMultilineCommentScanner.adaptToPreferenceChange(event);
+    if (fSinglelineCommentScanner.affectsBehavior(event))
+      fSinglelineCommentScanner.adaptToPreferenceChange(event);
+    if (fStringDQScanner.affectsBehavior(event))
+      fStringDQScanner.adaptToPreferenceChange(event);
+    if (fStringSQScanner.affectsBehavior(event))
+      fStringSQScanner.adaptToPreferenceChange(event);
+    if (fJavaDocScanner.affectsBehavior(event))
+      fJavaDocScanner.adaptToPreferenceChange(event);
   }
 
   /*
@@ -266,7 +351,7 @@ public class PHPSourceViewerConfiguration extends SourceViewerConfiguration {
   /**
    * Returns the names of the document position categories used by the document partitioners created by this object to manage their
    * partition information. If the partitioners don't use document position categories, the returned result is <code>null</code>.
-   * 
+   *
    * @return the partition managing position categories or <code>null</code> if there is none
    */
   public String[] getPartitionManagingPositionCategories() {
@@ -295,9 +380,9 @@ public class PHPSourceViewerConfiguration extends SourceViewerConfiguration {
 
   /**
    * Returns the preference store used by this configuration to initialize the individual bits and pieces.
-   * 
+   *
    * @return the preference store used to initialize this configuration
-   * 
+   *
    * @since 2.0
    */
   protected IPreferenceStore getPreferenceStore() {
@@ -329,39 +414,82 @@ public class PHPSourceViewerConfiguration extends SourceViewerConfiguration {
    * (non-Javadoc) Method declared on SourceViewerConfiguration
    */
   public IAutoIndentStrategy getAutoIndentStrategy(ISourceViewer sourceViewer, String contentType) {
+    if (IPHPPartitions.PHP_PHPDOC_COMMENT.equals(contentType)
+        || IPHPPartitions.PHP_MULTILINE_COMMENT.equals(contentType))
+      return new JavaDocAutoIndentStrategy(getConfiguredDocumentPartitioning(sourceViewer));
     if (IPHPPartitions.PHP_STRING_DQ.equals(contentType))
-      return new JavaStringAutoIndentStrategy(getConfiguredDocumentPartitioning(sourceViewer));
-
-    return (IPHPPartitions.PHP_PARTITIONING.equals(contentType) ? new PHPAutoIndentStrategy() : new DefaultAutoIndentStrategy());
+      return new JavaStringAutoIndentStrategyDQ(getConfiguredDocumentPartitioning(sourceViewer));
+    if (IPHPPartitions.PHP_STRING_SQ.equals(contentType))
+      return new JavaStringAutoIndentStrategySQ(getConfiguredDocumentPartitioning(sourceViewer));
+
+    return (PHPDocumentPartitioner.PHP_TEMPLATE_DATA.equals(contentType)
+        || PHPDocumentPartitioner.PHP_SCRIPT_CODE.equals(contentType) || IDocument.DEFAULT_CONTENT_TYPE.equals(contentType)
+        || IPHPPartitions.PHP_PARTITIONING.equals(contentType) || PHPPartitionScanner.PHP_SCRIPTING_AREA.equals(contentType) ? new PHPAutoIndentStrategy()
+        : new DefaultAutoIndentStrategy());
   }
 
   /**
    * Returns the PHP source code scanner for this configuration.
-   * 
+   *
    * @return the PHP source code scanner
    */
   protected RuleBasedScanner getCodeScanner() {
-    return fJavaTextTools.getCodeScanner();
+    return fCodeScanner; //fJavaTextTools.getCodeScanner();
+  }
+
+  /**
+   * Returns the Java multi-line comment scanner for this configuration.
+   *
+   * @return the Java multi-line comment scanner
+   * @since 2.0
+   */
+  protected RuleBasedScanner getMultilineCommentScanner() {
+    return fMultilineCommentScanner;
+  }
+
+  /**
+   * Returns the Java single-line comment scanner for this configuration.
+   *
+   * @return the Java single-line comment scanner
+   * @since 2.0
+   */
+  protected RuleBasedScanner getSinglelineCommentScanner() {
+    return fSinglelineCommentScanner;
   }
 
   /**
+   * Returns the PHP double quoted string scanner for this configuration.
+   *
+   * @return the PHP double quoted string scanner
+   */
+  protected RuleBasedScanner getStringDQScanner() {
+    return fStringDQScanner;
+  }
+
+  /**
+   * Returns the PHP single quoted string scanner for this configuration.
+   *
+   * @return the PHP single quoted string scanner
+   */
+  protected RuleBasedScanner getStringSQScanner() {
+    return fStringSQScanner;
+  }
+  /**
    * Returns the HTML source code scanner for this configuration.
-   * 
+   *
    * @return the HTML source code scanner
    */
-//  protected RuleBasedScanner getHTMLScanner() {
-//    return fJavaTextTools.getHTMLScanner();
-//  }
-
+  //  protected RuleBasedScanner getHTMLScanner() {
+  //    return fJavaTextTools.getHTMLScanner();
+  //  }
   /**
    * Returns the Smarty source code scanner for this configuration.
-   * 
+   *
    * @return the Smarty source code scanner
    */
-  protected RuleBasedScanner getSmartyScanner() {
-    return fJavaTextTools.getSmartyScanner();
-  }
-
+  //  protected RuleBasedScanner getSmartyScanner() {
+  //    return fJavaTextTools.getSmartyScanner();
+  //  }
   /*
    * @see SourceViewerConfiguration#getReconciler(ISourceViewer)
    */
@@ -385,16 +513,6 @@ public class PHPSourceViewerConfiguration extends SourceViewerConfiguration {
     return null;
   }
 
-  //   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
@@ -460,113 +578,77 @@ public class PHPSourceViewerConfiguration extends SourceViewerConfiguration {
 
   /**
    * Returns the SmartyDoc source code scanner for this configuration.
-   * 
+   *
    * @return the SmartyDoc source code scanner
    */
-  protected RuleBasedScanner getSmartyDocScanner() {
-    return fJavaTextTools.getSmartyDocScanner();
-  }
-
+  //  protected RuleBasedScanner getSmartyDocScanner() {
+  //    return fJavaTextTools.getSmartyDocScanner();
+  //  }
   /**
    * Returns the PHPDoc source code scanner for this configuration.
-   * 
+   *
    * @return the PHPDoc source code scanner
    */
   protected RuleBasedScanner getPHPDocScanner() {
-    return fJavaTextTools.getJavaDocScanner();
+    return fJavaDocScanner; //fJavaTextTools.getJavaDocScanner();
   }
 
   /*
    * (non-Javadoc) Method declared on SourceViewerConfiguration
    */
   public String[] getConfiguredContentTypes(ISourceViewer sourceViewer) {
-    return new String[] { 
-        IDocument.DEFAULT_CONTENT_TYPE, 
-        PHPPartitionScanner.PHP_SCRIPTING_AREA,
-        
-        IPHPPartitions.HTML, 
-        IPHPPartitions.HTML_MULTILINE_COMMENT,
-        IPHPPartitions.PHP_PARTITIONING, 
-        IPHPPartitions.PHP_SINGLELINE_COMMENT,
-        IPHPPartitions.PHP_MULTILINE_COMMENT,
-        IPHPPartitions.PHP_PHPDOC_COMMENT, 
-        IPHPPartitions.PHP_STRING_DQ,
-        IPHPPartitions.PHP_STRING_SQ,
-        IPHPPartitions.CSS,
-        IPHPPartitions.CSS_MULTILINE_COMMENT, 
-        IPHPPartitions.JAVASCRIPT, 
-        IPHPPartitions.JS_MULTILINE_COMMENT,
-        IPHPPartitions.SMARTY, 
+    return new String[] { IDocument.DEFAULT_CONTENT_TYPE, PHPPartitionScanner.PHP_SCRIPTING_AREA,
+
+    IPHPPartitions.HTML, IPHPPartitions.HTML_MULTILINE_COMMENT, IPHPPartitions.PHP_PARTITIONING,
+        IPHPPartitions.PHP_SINGLELINE_COMMENT, IPHPPartitions.PHP_MULTILINE_COMMENT, IPHPPartitions.PHP_PHPDOC_COMMENT,
+        IPHPPartitions.PHP_STRING_DQ, IPHPPartitions.PHP_STRING_SQ, IPHPPartitions.PHP_STRING_HEREDOC, IPHPPartitions.CSS, IPHPPartitions.CSS_MULTILINE_COMMENT,
+        IPHPPartitions.JAVASCRIPT, IPHPPartitions.JS_MULTILINE_COMMENT, IPHPPartitions.SMARTY,
         IPHPPartitions.SMARTY_MULTILINE_COMMENT,
-        
-        XMLPartitionScanner.XML_PI,
-               XMLPartitionScanner.XML_COMMENT,
-               XMLPartitionScanner.XML_DECL,
-               XMLPartitionScanner.XML_TAG,
-               XMLPartitionScanner.XML_ATTRIBUTE,
-               XMLPartitionScanner.XML_CDATA,
-               
-               XMLPartitionScanner.DTD_INTERNAL,
-               XMLPartitionScanner.DTD_INTERNAL_PI,
-               XMLPartitionScanner.DTD_INTERNAL_COMMENT,
-               XMLPartitionScanner.DTD_INTERNAL_DECL,
-               
-               PHPDocumentPartitioner.PHP_TEMPLATE_DATA,
-               PHPDocumentPartitioner.PHP_SCRIPT_CODE
-               };
+
+        XMLPartitionScanner.XML_PI, XMLPartitionScanner.XML_COMMENT, XMLPartitionScanner.XML_DECL, XMLPartitionScanner.XML_TAG,
+        XMLPartitionScanner.XML_ATTRIBUTE, XMLPartitionScanner.XML_CDATA,
+
+        XMLPartitionScanner.DTD_INTERNAL, XMLPartitionScanner.DTD_INTERNAL_PI, XMLPartitionScanner.DTD_INTERNAL_COMMENT,
+        XMLPartitionScanner.DTD_INTERNAL_DECL,
+
+        PHPDocumentPartitioner.PHP_TEMPLATE_DATA, PHPDocumentPartitioner.PHP_SCRIPT_CODE };
   }
 
   public String[] getConfiguredHTMLContentTypes() {
-    return new String[] {  
-        XMLPartitionScanner.XML_PI,
-               XMLPartitionScanner.XML_COMMENT,
-               XMLPartitionScanner.XML_DECL,
-               XMLPartitionScanner.XML_TAG,
-               XMLPartitionScanner.XML_ATTRIBUTE,
-               XMLPartitionScanner.XML_CDATA,
-               
-               XMLPartitionScanner.DTD_INTERNAL,
-               XMLPartitionScanner.DTD_INTERNAL_PI,
-               XMLPartitionScanner.DTD_INTERNAL_COMMENT,
-               XMLPartitionScanner.DTD_INTERNAL_DECL,
-        };
+    return new String[] { XMLPartitionScanner.XML_PI, XMLPartitionScanner.XML_COMMENT, XMLPartitionScanner.XML_DECL,
+        XMLPartitionScanner.XML_TAG, XMLPartitionScanner.XML_ATTRIBUTE, XMLPartitionScanner.XML_CDATA,
+
+        XMLPartitionScanner.DTD_INTERNAL, XMLPartitionScanner.DTD_INTERNAL_PI, XMLPartitionScanner.DTD_INTERNAL_COMMENT,
+        XMLPartitionScanner.DTD_INTERNAL_DECL, };
   }
+
   public String[] getConfiguredPHPContentTypes() {
-    return new String[] { 
-        IDocument.DEFAULT_CONTENT_TYPE, 
-        IPHPPartitions.PHP_PARTITIONING, 
-        IPHPPartitions.PHP_SINGLELINE_COMMENT,
-        IPHPPartitions.PHP_MULTILINE_COMMENT,
-        IPHPPartitions.PHP_PHPDOC_COMMENT, 
-        IPHPPartitions.PHP_STRING_DQ,
-        IPHPPartitions.PHP_STRING_SQ,
-        IPHPPartitions.CSS,
-        IPHPPartitions.CSS_MULTILINE_COMMENT, 
-        IPHPPartitions.JAVASCRIPT, 
-        IPHPPartitions.JS_MULTILINE_COMMENT,
-        IPHPPartitions.SMARTY, 
-        IPHPPartitions.SMARTY_MULTILINE_COMMENT,
-        };
-  }
-       /*
-        * @see org.eclipse.jface.text.source.SourceViewerConfiguration#getConfiguredDocumentPartitioning(org.eclipse.jface.text.source.ISourceViewer)
-        * @since 3.0
-        */
-       public String getConfiguredDocumentPartitioning(ISourceViewer sourceViewer) {
-               if (fDocumentPartitioning != null)
-                       return fDocumentPartitioning;
-               return super.getConfiguredDocumentPartitioning(sourceViewer);
-       }
+    return new String[] { IDocument.DEFAULT_CONTENT_TYPE, IPHPPartitions.PHP_PARTITIONING, IPHPPartitions.PHP_SINGLELINE_COMMENT,
+        IPHPPartitions.PHP_MULTILINE_COMMENT, IPHPPartitions.PHP_PHPDOC_COMMENT, IPHPPartitions.PHP_STRING_DQ,
+        IPHPPartitions.PHP_STRING_SQ, IPHPPartitions.PHP_STRING_HEREDOC, IPHPPartitions.CSS, IPHPPartitions.CSS_MULTILINE_COMMENT, IPHPPartitions.JAVASCRIPT,
+        IPHPPartitions.JS_MULTILINE_COMMENT, IPHPPartitions.SMARTY, IPHPPartitions.SMARTY_MULTILINE_COMMENT, };
+  }
+
+  /*
+   * @see org.eclipse.jface.text.source.SourceViewerConfiguration#getConfiguredDocumentPartitioning(org.eclipse.jface.text.source.ISourceViewer)
+   * @since 3.0
+   */
+  public String getConfiguredDocumentPartitioning(ISourceViewer sourceViewer) {
+    if (fDocumentPartitioning != null)
+      return fDocumentPartitioning;
+    return super.getConfiguredDocumentPartitioning(sourceViewer);
+  }
+
   /*
    * (non-Javadoc) Method declared on SourceViewerConfiguration
    */
   public IContentAssistant getContentAssistant(ISourceViewer sourceViewer) {
     ContentAssistant assistant = new ContentAssistant();
-    IContentAssistProcessor processor = new HTMLCompletionProcessor();
+    IContentAssistProcessor processor = new HTMLCompletionProcessor(getEditor());
     assistant.setDocumentPartitioning(getConfiguredDocumentPartitioning(sourceViewer));
     assistant.setContentAssistProcessor(processor, IPHPPartitions.HTML);
     assistant.setContentAssistProcessor(processor, IPHPPartitions.HTML_MULTILINE_COMMENT);
-    
+
     assistant.setContentAssistProcessor(processor, IPHPPartitions.CSS);
     assistant.setContentAssistProcessor(processor, IPHPPartitions.CSS_MULTILINE_COMMENT);
     assistant.setContentAssistProcessor(processor, IPHPPartitions.JAVASCRIPT);
@@ -574,20 +656,21 @@ public class PHPSourceViewerConfiguration extends SourceViewerConfiguration {
     // TODO define special smarty partition content assist
     assistant.setContentAssistProcessor(processor, IPHPPartitions.SMARTY);
     assistant.setContentAssistProcessor(processor, IPHPPartitions.SMARTY_MULTILINE_COMMENT);
-    
+
     assistant.setContentAssistProcessor(processor, PHPDocumentPartitioner.PHP_TEMPLATE_DATA);
     String[] htmlTypes = getConfiguredHTMLContentTypes();
     for (int i = 0; i < htmlTypes.length; i++) {
-      assistant.setContentAssistProcessor(processor, htmlTypes[i]); 
+      assistant.setContentAssistProcessor(processor, htmlTypes[i]);
     }
     processor = new PHPCompletionProcessor(getEditor());
-    
+
     assistant.setContentAssistProcessor(processor, PHPDocumentPartitioner.PHP_SCRIPT_CODE);
     assistant.setContentAssistProcessor(processor, IPHPPartitions.PHP_PARTITIONING);
     assistant.setContentAssistProcessor(processor, IPHPPartitions.PHP_STRING_DQ);
     assistant.setContentAssistProcessor(processor, IPHPPartitions.PHP_STRING_SQ);
-    
-    assistant.setContentAssistProcessor(new PHPDocCompletionProcessor(), IPHPPartitions.PHP_PHPDOC_COMMENT);
+    assistant.setContentAssistProcessor(processor, IPHPPartitions.PHP_STRING_HEREDOC);
+
+    assistant.setContentAssistProcessor(new PHPDocCompletionProcessor(getEditor()), IPHPPartitions.PHP_PHPDOC_COMMENT);
     //    assistant.enableAutoActivation(true);
     //    assistant.setAutoActivationDelay(500);
     //    assistant.setProposalPopupOrientation(ContentAssistant.PROPOSAL_OVERLAY);
@@ -601,7 +684,7 @@ public class PHPSourceViewerConfiguration extends SourceViewerConfiguration {
     assistant.setContextInformationPopupOrientation(ContentAssistant.CONTEXT_INFO_ABOVE);
     assistant.setInformationControlCreator(getInformationControlCreator(sourceViewer));
     return assistant;
-  } 
+  }
 
   /*
    * (non-Javadoc) Method declared on SourceViewerConfiguration
@@ -655,29 +738,32 @@ public class PHPSourceViewerConfiguration extends SourceViewerConfiguration {
     vector.add(""); //$NON-NLS-1$
     return (String[]) vector.toArray(new String[vector.size()]);
   }
+
   /**
-        * @return <code>true</code> iff the new setup without text tools is in use.
-        * 
-        * @since 3.0
-        */
-       private boolean isNewSetup() {
-               return fJavaTextTools == null;
-       }
-  /**
-        * Creates and returns a preference store which combines the preference
-        * stores from the text tools and which is read-only.
-        *
-        * @return the read-only preference store 
-        * @since 3.0
-        */
-       private IPreferenceStore createPreferenceStore() {
-               Assert.isTrue(!isNewSetup());
-               IPreferenceStore generalTextStore= EditorsUI.getPreferenceStore();
-               if (fJavaTextTools.getCorePreferenceStore() == null)
-                       return new ChainedPreferenceStore(new IPreferenceStore[] { fJavaTextTools.getPreferenceStore(), generalTextStore});
-               
-               return new ChainedPreferenceStore(new IPreferenceStore[] { fJavaTextTools.getPreferenceStore(), new PreferencesAdapter(fJavaTextTools.getCorePreferenceStore()), generalTextStore });
-       }
+   * @return <code>true</code> iff the new setup without text tools is in use.
+   *
+   * @since 3.0
+   */
+//  private boolean isNewSetup() {
+//    return fJavaTextTools == null;
+//  }
+
+  /**
+   * Creates and returns a preference store which combines the preference stores from the text tools and which is read-only.
+   *
+   * @return the read-only preference store
+   * @since 3.0
+   */
+//  private IPreferenceStore createPreferenceStore() {
+//    Assert.isTrue(!isNewSetup());
+//    IPreferenceStore generalTextStore = EditorsUI.getPreferenceStore();
+//    if (fJavaTextTools.getCorePreferenceStore() == null)
+//      return new ChainedPreferenceStore(new IPreferenceStore[] { fJavaTextTools.getPreferenceStore(), generalTextStore });
+//
+//    return new ChainedPreferenceStore(new IPreferenceStore[] { fJavaTextTools.getPreferenceStore(),
+//        new PreferencesAdapter(fJavaTextTools.getCorePreferenceStore()), generalTextStore });
+//  }
+
   /*
    * (non-Javadoc) Method declared on SourceViewerConfiguration
    */
@@ -689,39 +775,39 @@ public class PHPSourceViewerConfiguration extends SourceViewerConfiguration {
     PresentationReconciler phpReconciler = new JavaPresentationReconciler();
     phpReconciler.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, IPHPPartitions.HTML);
-//    reconciler.setRepairer(dr, IPHPPartitions.HTML);
-//    dr = new DefaultDamagerRepairer(getHTMLScanner());
-//    reconciler.setDamager(dr, IPHPPartitions.CSS);
-//    reconciler.setRepairer(dr, IPHPPartitions.CSS);
-//    dr = new DefaultDamagerRepairer(getHTMLScanner());
-//    reconciler.setDamager(dr, IPHPPartitions.CSS_MULTILINE_COMMENT);
-//    reconciler.setRepairer(dr, IPHPPartitions.CSS_MULTILINE_COMMENT);
-//    dr = new DefaultDamagerRepairer(getHTMLScanner());
-//    reconciler.setDamager(dr, IPHPPartitions.JAVASCRIPT);
-//    reconciler.setRepairer(dr, IPHPPartitions.JAVASCRIPT);
-//    dr = new DefaultDamagerRepairer(getHTMLScanner());
-//    reconciler.setDamager(dr, IPHPPartitions.JS_MULTILINE_COMMENT);
-//    reconciler.setRepairer(dr, IPHPPartitions.JS_MULTILINE_COMMENT);
-    DefaultDamagerRepairer phpDR = new DefaultDamagerRepairer(getSmartyScanner());
-    phpReconciler.setDamager(phpDR, IPHPPartitions.SMARTY);
-    phpReconciler.setRepairer(phpDR, IPHPPartitions.SMARTY);
-    phpDR = new DefaultDamagerRepairer(getSmartyDocScanner());
-    phpReconciler.setDamager(phpDR, IPHPPartitions.SMARTY_MULTILINE_COMMENT);
-    phpReconciler.setRepairer(phpDR, IPHPPartitions.SMARTY_MULTILINE_COMMENT);
-//    dr = new DefaultDamagerRepairer(new SingleTokenScanner(new TextAttribute(fJavaTextTools.getColorManager().getColor(
-//        PHPColorProvider.MULTI_LINE_COMMENT))));
-//    reconciler.setDamager(dr, IPHPPartitions.HTML_MULTILINE_COMMENT);
-//    reconciler.setRepairer(dr, IPHPPartitions.HTML_MULTILINE_COMMENT);
-
-    phpDR = new DefaultDamagerRepairer(getCodeScanner());
+    //    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, IPHPPartitions.HTML);
+    //    reconciler.setRepairer(dr, IPHPPartitions.HTML);
+    //    dr = new DefaultDamagerRepairer(getHTMLScanner());
+    //    reconciler.setDamager(dr, IPHPPartitions.CSS);
+    //    reconciler.setRepairer(dr, IPHPPartitions.CSS);
+    //    dr = new DefaultDamagerRepairer(getHTMLScanner());
+    //    reconciler.setDamager(dr, IPHPPartitions.CSS_MULTILINE_COMMENT);
+    //    reconciler.setRepairer(dr, IPHPPartitions.CSS_MULTILINE_COMMENT);
+    //    dr = new DefaultDamagerRepairer(getHTMLScanner());
+    //    reconciler.setDamager(dr, IPHPPartitions.JAVASCRIPT);
+    //    reconciler.setRepairer(dr, IPHPPartitions.JAVASCRIPT);
+    //    dr = new DefaultDamagerRepairer(getHTMLScanner());
+    //    reconciler.setDamager(dr, IPHPPartitions.JS_MULTILINE_COMMENT);
+    //    reconciler.setRepairer(dr, IPHPPartitions.JS_MULTILINE_COMMENT);
+    //    DefaultDamagerRepairer phpDR = new DefaultDamagerRepairer(getSmartyScanner());
+    //    phpReconciler.setDamager(phpDR, IPHPPartitions.SMARTY);
+    //    phpReconciler.setRepairer(phpDR, IPHPPartitions.SMARTY);
+    //    phpDR = new DefaultDamagerRepairer(getSmartyDocScanner());
+    //    phpReconciler.setDamager(phpDR, IPHPPartitions.SMARTY_MULTILINE_COMMENT);
+    //    phpReconciler.setRepairer(phpDR, IPHPPartitions.SMARTY_MULTILINE_COMMENT);
+    //    dr = new DefaultDamagerRepairer(new SingleTokenScanner(new TextAttribute(fJavaTextTools.getColorManager().getColor(
+    //        PHPColorProvider.MULTI_LINE_COMMENT))));
+    //    reconciler.setDamager(dr, IPHPPartitions.HTML_MULTILINE_COMMENT);
+    //    reconciler.setRepairer(dr, IPHPPartitions.HTML_MULTILINE_COMMENT);
+
+    DefaultDamagerRepairer phpDR = new DefaultDamagerRepairer(getCodeScanner());
     phpReconciler.setDamager(phpDR, IDocument.DEFAULT_CONTENT_TYPE);
     phpReconciler.setRepairer(phpDR, IDocument.DEFAULT_CONTENT_TYPE);
-    
+
     phpDR = new DefaultDamagerRepairer(getCodeScanner());
     phpReconciler.setDamager(phpDR, IPHPPartitions.PHP_PARTITIONING);
     phpReconciler.setRepairer(phpDR, IPHPPartitions.PHP_PARTITIONING);
@@ -730,72 +816,62 @@ public class PHPSourceViewerConfiguration extends SourceViewerConfiguration {
     phpReconciler.setDamager(phpDR, IPHPPartitions.PHP_PHPDOC_COMMENT);
     phpReconciler.setRepairer(phpDR, IPHPPartitions.PHP_PHPDOC_COMMENT);
 
-    phpDR = new DefaultDamagerRepairer(new SingleTokenScanner(new TextAttribute(fJavaTextTools.getColorManager().getColor(
-        PHPColorProvider.STRING))));
+    phpDR = new DefaultDamagerRepairer(getStringDQScanner());
     phpReconciler.setDamager(phpDR, IPHPPartitions.PHP_STRING_DQ);
     phpReconciler.setRepairer(phpDR, IPHPPartitions.PHP_STRING_DQ);
-    phpDR = new DefaultDamagerRepairer(new SingleTokenScanner(new TextAttribute(fJavaTextTools.getColorManager().getColor(
-        PHPColorProvider.STRING))));
+    phpDR = new DefaultDamagerRepairer(getStringSQScanner());
     phpReconciler.setDamager(phpDR, IPHPPartitions.PHP_STRING_SQ);
     phpReconciler.setRepairer(phpDR, IPHPPartitions.PHP_STRING_SQ);
-    phpDR = new DefaultDamagerRepairer(new SingleTokenScanner(new TextAttribute(fJavaTextTools.getColorManager().getColor(
-        PHPColorProvider.SINGLE_LINE_COMMENT))));
+    phpDR = new DefaultDamagerRepairer(getStringDQScanner());
+    phpReconciler.setDamager(phpDR, IPHPPartitions.PHP_STRING_HEREDOC);
+    phpReconciler.setRepairer(phpDR, IPHPPartitions.PHP_STRING_HEREDOC);
+    phpDR = new DefaultDamagerRepairer(getSinglelineCommentScanner());
     phpReconciler.setDamager(phpDR, IPHPPartitions.PHP_SINGLELINE_COMMENT);
     phpReconciler.setRepairer(phpDR, IPHPPartitions.PHP_SINGLELINE_COMMENT);
-    phpDR = new DefaultDamagerRepairer(new SingleTokenScanner(new TextAttribute(fJavaTextTools.getColorManager().getColor(
-        PHPColorProvider.MULTI_LINE_COMMENT))));
+    phpDR = new DefaultDamagerRepairer(getMultilineCommentScanner());
     phpReconciler.setDamager(phpDR, IPHPPartitions.PHP_MULTILINE_COMMENT);
     phpReconciler.setRepairer(phpDR, IPHPPartitions.PHP_MULTILINE_COMMENT);
-    
+
     PresentationReconciler reconciler = new PresentationReconciler();
     reconciler.setDocumentPartitioning(getConfiguredDocumentPartitioning(sourceViewer));
-//
-    JavaTextTools jspTextTools = PHPeclipsePlugin.getDefault().getJavaTextTools();
-    DefaultDamagerRepairer dr = new DefaultDamagerRepairer(new SingleTokenScanner(new TextAttribute(fJavaTextTools.getColorManager().getColor(
-        PHPColorProvider.PHPDOC_TAG))));//jspTextTools.getJSPTextScanner());
-       reconciler.setDamager(dr, IDocument.DEFAULT_CONTENT_TYPE);
-       reconciler.setRepairer(dr, IDocument.DEFAULT_CONTENT_TYPE);
-
-//     dr = new DefaultDamagerRepairer(new SingleTokenScanner(new TextAttribute(fJavaTextTools.getColorManager().getColor(
-//        PHPColorProvider.PHPDOC_TAG))));//jspTextTools.getJSPBracketScanner());
-//     reconciler.setDamager(dr, JSPScriptScanner.JSP_BRACKET);
-//     reconciler.setRepairer(dr, JSPScriptScanner.JSP_BRACKET);
-       
+    //
+//    JavaTextTools jspTextTools = PHPeclipsePlugin.getDefault().getJavaTextTools();
+    DefaultDamagerRepairer dr = new DefaultDamagerRepairer(getPHPDocScanner());//jspTextTools.getJSPTextScanner());
+    reconciler.setDamager(dr, IDocument.DEFAULT_CONTENT_TYPE);
+    reconciler.setRepairer(dr, IDocument.DEFAULT_CONTENT_TYPE);
+
+    // dr = new DefaultDamagerRepairer(new SingleTokenScanner(new TextAttribute(fJavaTextTools.getColorManager().getColor(
+    //        PHPColorProvider.PHPDOC_TAG))));//jspTextTools.getJSPBracketScanner());
+    // reconciler.setDamager(dr, JSPScriptScanner.JSP_BRACKET);
+    // reconciler.setRepairer(dr, JSPScriptScanner.JSP_BRACKET);
+
     // xml partitions
-       configureEmbeddedPresentationReconciler(reconciler,
-           xmlConfiguration.getPresentationReconciler(sourceViewer),
-               xmlConfiguration.getConfiguredContentTypes(sourceViewer),
-               PHPDocumentPartitioner.PHP_TEMPLATE_DATA);
-
-       // java partitions
-       configureEmbeddedPresentationReconciler(reconciler,
-           phpReconciler,
-               getConfiguredPHPContentTypes(),
-               PHPDocumentPartitioner.PHP_SCRIPT_CODE);
-       
+    configureEmbeddedPresentationReconciler(reconciler, xmlConfiguration.getPresentationReconciler(sourceViewer), xmlConfiguration
+        .getConfiguredContentTypes(sourceViewer), PHPDocumentPartitioner.PHP_TEMPLATE_DATA);
+
+    // java partitions
+    configureEmbeddedPresentationReconciler(reconciler, phpReconciler, getConfiguredPHPContentTypes(),
+        PHPDocumentPartitioner.PHP_SCRIPT_CODE);
+
     return reconciler;
   }
-  
-  private void configureEmbeddedPresentationReconciler(
-               PresentationReconciler reconciler,
-               IPresentationReconciler embedded,
-               String[] types, 
-               String defaultType
-       ) {
-               for (int i = 0; i < types.length; i++) {
-                       String type = types[i];
 
-                       IPresentationDamager damager = embedded.getDamager(type);
-                       IPresentationRepairer repairer = embedded.getRepairer(type);
+  private void configureEmbeddedPresentationReconciler(PresentationReconciler reconciler, IPresentationReconciler embedded,
+      String[] types, String defaultType) {
+    for (int i = 0; i < types.length; i++) {
+      String type = types[i];
 
-                       if (type == IDocument.DEFAULT_CONTENT_TYPE) {
-                               type = defaultType;
-                       }
+      IPresentationDamager damager = embedded.getDamager(type);
+      IPresentationRepairer repairer = embedded.getRepairer(type);
 
-                       reconciler.setDamager(damager, type);
-                       reconciler.setRepairer(repairer, type);
-               }
-       }
+      if (type == IDocument.DEFAULT_CONTENT_TYPE) {
+        type = defaultType;
+      }
+
+      reconciler.setDamager(damager, type);
+      reconciler.setRepairer(repairer, type);
+    }
+  }
 
   /*
    * (non-Javadoc) Method declared on SourceViewerConfiguration
@@ -836,20 +912,21 @@ public class PHPSourceViewerConfiguration extends SourceViewerConfiguration {
     };
   }
 
-       /*
-        * @see SourceViewerConfiguration#getInformationPresenter(ISourceViewer)
-        * @since 2.0
-        */
-       public IInformationPresenter getInformationPresenter(ISourceViewer sourceViewer) {
-               InformationPresenter presenter= new InformationPresenter(getInformationPresenterControlCreator(sourceViewer));
-               presenter.setDocumentPartitioning(getConfiguredDocumentPartitioning(sourceViewer));
-               IInformationProvider provider= new JavaInformationProvider(getEditor());
-               presenter.setInformationProvider(provider, IDocument.DEFAULT_CONTENT_TYPE);
-               presenter.setInformationProvider(provider, IPHPPartitions.PHP_PHPDOC_COMMENT);
-//             presenter.setInformationProvider(provider, IPHPPartitions.JAVA_CHARACTER);
-               presenter.setSizeConstraints(60, 10, true, true);
-               return presenter;
-       }
+  /*
+   * @see SourceViewerConfiguration#getInformationPresenter(ISourceViewer)
+   * @since 2.0
+   */
+  public IInformationPresenter getInformationPresenter(ISourceViewer sourceViewer) {
+    InformationPresenter presenter = new InformationPresenter(getInformationPresenterControlCreator(sourceViewer));
+    presenter.setDocumentPartitioning(getConfiguredDocumentPartitioning(sourceViewer));
+    IInformationProvider provider = new JavaInformationProvider(getEditor());
+    presenter.setInformationProvider(provider, IDocument.DEFAULT_CONTENT_TYPE);
+    presenter.setInformationProvider(provider, IPHPPartitions.PHP_PHPDOC_COMMENT);
+    //         presenter.setInformationProvider(provider, IPHPPartitions.JAVA_CHARACTER);
+    presenter.setSizeConstraints(60, 10, true, true);
+    return presenter;
+  }
+
   /*
    * @see SourceViewerConfiguration#getInformationPresenter(ISourceViewer)
    * @since 2.0
@@ -868,7 +945,7 @@ public class PHPSourceViewerConfiguration extends SourceViewerConfiguration {
   /**
    * 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 <code>DefaultInformationControl</code> instances.
-   * 
+   *
    * @param sourceViewer
    *          the source viewer to be configured by this configuration
    * @return an information control creator
@@ -888,7 +965,7 @@ public class PHPSourceViewerConfiguration extends SourceViewerConfiguration {
   /**
    * 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 <code>JavaOutlineInformationControl</code> instances.
-   * 
+   *
    * @param sourceViewer
    *          the source viewer to be configured by this configuration
    * @return an information control creator
@@ -906,7 +983,7 @@ public class PHPSourceViewerConfiguration extends SourceViewerConfiguration {
 
   /**
    * 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
@@ -919,6 +996,7 @@ public class PHPSourceViewerConfiguration extends SourceViewerConfiguration {
     presenter.setAnchor(InformationPresenter.ANCHOR_GLOBAL);
     IInformationProvider provider = new JavaElementProvider(getEditor(), doCodeResolve);
     presenter.setInformationProvider(provider, IDocument.DEFAULT_CONTENT_TYPE);
+    presenter.setInformationProvider(provider, PHPDocumentPartitioner.PHP_SCRIPT_CODE);
     presenter.setInformationProvider(provider, IPHPPartitions.PHP_PARTITIONING);
     presenter.setInformationProvider(provider, IPHPPartitions.PHP_PHPDOC_COMMENT);
     presenter.setInformationProvider(provider, IPHPPartitions.SMARTY_MULTILINE_COMMENT);