Small improvements in parser
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpdt / ui / text / PHPSourceViewerConfiguration.java
index 735dcec..518a3bd 100644 (file)
@@ -7,7 +7,7 @@
 
  Contributors:
  IBM Corporation - Initial implementation
- Klaus Hartlage - www.eclipseproject.de
+ www.phpeclipse.de
  **********************************************************************/
 package net.sourceforge.phpdt.ui.text;
 
@@ -19,7 +19,6 @@ 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.JavaColorManager;
 import net.sourceforge.phpdt.internal.ui.text.JavaCompositeReconcilingStrategy;
 import net.sourceforge.phpdt.internal.ui.text.JavaElementProvider;
 import net.sourceforge.phpdt.internal.ui.text.JavaOutlineInformationControl;
@@ -27,16 +26,17 @@ 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;
@@ -45,9 +45,6 @@ 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.php.SmartyCodeScanner;
-import net.sourceforge.phpeclipse.phpeditor.php.SmartyDocCodeScanner;
-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;
@@ -168,12 +165,14 @@ public class PHPSourceViewerConfiguration extends SourceViewerConfiguration {
   private AbstractJavaScanner fSinglelineCommentScanner;
 
   /**
-   * The Java string scanner
-   * 
-   * @since 3.0
+   * The PHP double quoted string scanner
    */
-  private AbstractJavaScanner fStringScanner;
-
+  private AbstractJavaScanner fStringDQScanner;
+  /**
+   * The PHP single quoted string scanner
+   */
+  private AbstractJavaScanner fStringSQScanner;
+  
   /**
    * The Javadoc scanner
    * 
@@ -224,41 +223,42 @@ 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;
-       
+    fColorManager = colorManager;
+    fPreferenceStore = preferenceStore;
+    fTextEditor = editor;
+    fDocumentPartitioning = partitioning;
+
     initializeScanners();
   }
 
   /**
-        * 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();
-//    fStringScanner = (AbstractJavaScanner) fJavaTextTools.getStringScanner();
-//    fJavaDocScanner = (AbstractJavaScanner) fJavaTextTools.getJavaDocScanner();
-//    fTextEditor = editor;
-//    fXMLTextTools = XMLPlugin.getDefault().getXMLTextTools();
-//    xmlConfiguration = new XMLConfiguration(fXMLTextTools);
-//  }
-
+   * 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.
    * 
@@ -280,7 +280,9 @@ public class PHPSourceViewerConfiguration extends SourceViewerConfiguration {
         IPreferenceConstants.PHP_MULTILINE_COMMENT);
     fSinglelineCommentScanner = new SingleTokenPHPScanner(getColorManager(), fPreferenceStore,
         IPreferenceConstants.PHP_SINGLELINE_COMMENT);
-    fStringScanner = new SingleTokenPHPScanner(getColorManager(), fPreferenceStore, IPreferenceConstants.PHP_STRING);
+//    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);
   }
 
@@ -294,7 +296,7 @@ public class PHPSourceViewerConfiguration extends SourceViewerConfiguration {
    */
   public boolean affectsTextPresentation(PropertyChangeEvent event) {
     return fCodeScanner.affectsBehavior(event) || fMultilineCommentScanner.affectsBehavior(event)
-        || fSinglelineCommentScanner.affectsBehavior(event) || fStringScanner.affectsBehavior(event)
+        || fSinglelineCommentScanner.affectsBehavior(event) || fStringDQScanner.affectsBehavior(event)|| fStringSQScanner.affectsBehavior(event)
         || fJavaDocScanner.affectsBehavior(event);
   }
 
@@ -317,8 +319,10 @@ public class PHPSourceViewerConfiguration extends SourceViewerConfiguration {
       fMultilineCommentScanner.adaptToPreferenceChange(event);
     if (fSinglelineCommentScanner.affectsBehavior(event))
       fSinglelineCommentScanner.adaptToPreferenceChange(event);
-    if (fStringScanner.affectsBehavior(event))
-      fStringScanner.adaptToPreferenceChange(event);
+    if (fStringDQScanner.affectsBehavior(event))
+      fStringDQScanner.adaptToPreferenceChange(event);
+    if (fStringSQScanner.affectsBehavior(event))
+      fStringSQScanner.adaptToPreferenceChange(event);
     if (fJavaDocScanner.affectsBehavior(event))
       fJavaDocScanner.adaptToPreferenceChange(event);
   }
@@ -413,8 +417,13 @@ public class PHPSourceViewerConfiguration extends SourceViewerConfiguration {
    * (non-Javadoc) Method declared on SourceViewerConfiguration
    */
   public IAutoIndentStrategy getAutoIndentStrategy(ISourceViewer sourceViewer, String contentType) {
-    if (IPHPPartitions.PHP_STRING_DQ.equals(contentType) || IPHPPartitions.PHP_STRING_SQ.equals(contentType))
-      return new JavaStringAutoIndentStrategy(getConfiguredDocumentPartitioning(sourceViewer));
+    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 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)
@@ -430,35 +439,44 @@ public class PHPSourceViewerConfiguration extends SourceViewerConfiguration {
   protected RuleBasedScanner 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 Java string scanner for this configuration.
-        *
-        * @return the Java string scanner
-        * @since 2.0
-        */
-       protected RuleBasedScanner getStringScanner() {
-               return fStringScanner;
-       }
+
+  /**
+   * 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.
    * 
@@ -472,10 +490,9 @@ public class PHPSourceViewerConfiguration extends SourceViewerConfiguration {
    * 
    * @return the Smarty source code scanner
    */
-//  protected RuleBasedScanner getSmartyScanner() {
-//    return fJavaTextTools.getSmartyScanner();
-//  }
-
+  //  protected RuleBasedScanner getSmartyScanner() {
+  //    return fJavaTextTools.getSmartyScanner();
+  //  }
   /*
    * @see SourceViewerConfiguration#getReconciler(ISourceViewer)
    */
@@ -499,16 +516,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
@@ -577,10 +584,9 @@ public class PHPSourceViewerConfiguration extends SourceViewerConfiguration {
    * 
    * @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.
    * 
@@ -789,12 +795,12 @@ public class PHPSourceViewerConfiguration extends SourceViewerConfiguration {
     //    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);
+    //    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);
@@ -812,12 +818,12 @@ public class PHPSourceViewerConfiguration extends SourceViewerConfiguration {
     phpReconciler.setDamager(phpDR, IPHPPartitions.PHP_PHPDOC_COMMENT);
     phpReconciler.setRepairer(phpDR, IPHPPartitions.PHP_PHPDOC_COMMENT);
 
-    phpDR = new DefaultDamagerRepairer(getStringScanner());
+    phpDR = new DefaultDamagerRepairer(getStringDQScanner());
     phpReconciler.setDamager(phpDR, IPHPPartitions.PHP_STRING_DQ);
     phpReconciler.setRepairer(phpDR, IPHPPartitions.PHP_STRING_DQ);
-    phpDR = new DefaultDamagerRepairer(getStringScanner());
+    phpDR = new DefaultDamagerRepairer(getStringSQScanner());
     phpReconciler.setDamager(phpDR, IPHPPartitions.PHP_STRING_SQ);
-    phpReconciler.setRepairer(phpDR, IPHPPartitions.PHP_STRING_SQ);
+    phpReconciler.setRepairer(phpDR, IPHPPartitions.PHP_STRING_SQ); 
     phpDR = new DefaultDamagerRepairer(getSinglelineCommentScanner());
     phpReconciler.setDamager(phpDR, IPHPPartitions.PHP_SINGLELINE_COMMENT);
     phpReconciler.setRepairer(phpDR, IPHPPartitions.PHP_SINGLELINE_COMMENT);
@@ -989,6 +995,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);