ContextHelp now in new module net.sourceforge.phpeclipse.phphelp
authorkhartlage <khartlage>
Mon, 23 Dec 2002 21:12:27 +0000 (21:12 +0000)
committerkhartlage <khartlage>
Mon, 23 Dec 2002 21:12:27 +0000 (21:12 +0000)
12 files changed:
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/IPreferenceConstants.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/PHPSyntaxPreferencePage.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/PHPeclipsePlugin.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/actions/PHPEclipseShowContextHelp.java [deleted file]
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPContentOutlinePage.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPEditor.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPFunctionHelpResource.java [deleted file]
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPParser.java [deleted file]
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/php/PHPCodeScanner.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/php/PHPCompletionProcessor.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/phpparser/PHPParser.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/util/PHPColorProvider.java

index 88f3dd7..db03c5f 100644 (file)
@@ -35,31 +35,37 @@ import org.eclipse.ui.plugin.AbstractUIPlugin;
  * The main plugin class to be used in the desktop.
  */
 public interface IPreferenceConstants {
-       public static final String LOCALHOST_PREF = "_localhost";
-       public static final String DOCUMENTROOT_PREF = "_documentroot";
-       public static final String USE_EXTERNAL_BROWSER_PREF = "_use_external_browser";
-       public static final String EXTERNAL_BROWSER_PREF = "_external_browser";
-       public static final String MYSQL_PREF = "_my_sql";
-       public static final String APACHE_START_PREF = "_apache_start";
-       public static final String APACHE_STOP_PREF = "_apache_stop";
-       public static final String APACHE_RESTART_PREF = "_apache_restart";
-  public static final String SHOW_OUTPUT_IN_CONSOLE = "_sho_output_in_console";
-  public static final String EXTERNAL_PARSER_PREF = "_external_parser";
+       public static final String LOCALHOST_PREF = "_localhost"; //$NON-NLS-1$
+       public static final String DOCUMENTROOT_PREF = "_documentroot"; //$NON-NLS-1$
+       public static final String USE_EXTERNAL_BROWSER_PREF = "_use_external_browser"; //$NON-NLS-1$
+       public static final String EXTERNAL_BROWSER_PREF = "_external_browser"; //$NON-NLS-1$
+       public static final String MYSQL_PREF = "_my_sql"; //$NON-NLS-1$
+       public static final String APACHE_START_PREF = "_apache_start"; //$NON-NLS-1$
+       public static final String APACHE_STOP_PREF = "_apache_stop"; //$NON-NLS-1$
+       public static final String APACHE_RESTART_PREF = "_apache_restart"; //$NON-NLS-1$
+  public static final String SHOW_OUTPUT_IN_CONSOLE = "_sho_output_in_console"; //$NON-NLS-1$
+  public static final String EXTERNAL_PARSER_PREF = "_external_parser"; //$NON-NLS-1$
 
-  public static final String PHP_PARSER_DEFAULT = "_php_parser_default";
-  public static final String PHP_INTERNAL_PARSER = "_php_internal_parser";
-  public static final String PHP_EXTERNAL_PARSER = "_php_external_parser";
-  public static final String PHP_PARSE_ON_SAVE = "_php_parse_on_save";
+  public static final String PHP_PARSER_DEFAULT = "_php_parser_default"; //$NON-NLS-1$
+  public static final String PHP_INTERNAL_PARSER = "_php_internal_parser"; //$NON-NLS-1$
+  public static final String PHP_EXTERNAL_PARSER = "_php_external_parser"; //$NON-NLS-1$
+  public static final String PHP_PARSE_ON_SAVE = "_php_parse_on_save"; //$NON-NLS-1$
   
-  public static final String PHP_MULTILINE_COMMENT = "_php_multilineComment";
-  public static final String PHP_SINGLELINE_COMMENT = "_php_singlelineComment";
-  public static final String PHP_KEYWORD = "_php_keyword";
-  public static final String PHP_VARIABLE = "_php_variable";
-  public static final String PHP_FUNCTIONNAME = "_php_functionname";
-  public static final String PHP_STRING = "_php_string";
-  public static final String PHP_DEFAULT = "_php_default";
+  public static final String PHP_MULTILINE_COMMENT = "_php_multilineComment"; //$NON-NLS-1$
+  public static final String PHP_SINGLELINE_COMMENT = "_php_singlelineComment"; //$NON-NLS-1$
+  public static final String PHP_KEYWORD = "_php_keyword"; //$NON-NLS-1$
+  public static final String PHP_VARIABLE = "_php_variable"; //$NON-NLS-1$
+  public static final String PHP_FUNCTIONNAME = "_php_functionname"; //$NON-NLS-1$
+  public static final String PHP_STRING = "_php_string"; //$NON-NLS-1$
+  public static final String PHP_DEFAULT = "_php_default"; //$NON-NLS-1$
   
-  public static final String LINKED_POSITION_COLOR= "_linkedPositionColor";
+  public static final String LINKED_POSITION_COLOR= "_linkedPositionColor"; //$NON-NLS-1$
   
+  /** Preference key for showing the line number ruler */
+  public final static String LINE_NUMBER_RULER= "_lineNumberRuler"; //$NON-NLS-1$
+  /** Preference key for the foreground color of the line numbers */
+  public final static String LINE_NUMBER_COLOR= "_lineNumberColor"; //$NON-NLS-1$
   
+  public final static String PREFERENCE_COLOR_BACKGROUND_SYSTEM_DEFAULT = "_defaultBackgroundColor"; //$NON-NLS-1$
+  public final static String PREFERENCE_COLOR_BACKGROUND = "backgroundColor"; //$NON-NLS-1$
 }
\ No newline at end of file
index d3c10d4..eb7c7c0 100644 (file)
@@ -11,10 +11,10 @@ Contributors:
 **********************************************************************/
 package net.sourceforge.phpeclipse;
 
+import org.eclipse.jface.preference.BooleanFieldEditor;
 import org.eclipse.jface.preference.ColorFieldEditor;
 import org.eclipse.jface.preference.FieldEditorPreferencePage;
 import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.jface.preference.RadioGroupFieldEditor;
 import org.eclipse.ui.IWorkbench;
 import org.eclipse.ui.IWorkbenchPreferencePage;
 
@@ -33,6 +33,10 @@ public class PHPSyntaxPreferencePage extends FieldEditorPreferencePage implement
   protected void createFieldEditors() {
     final IPreferenceStore store = PHPeclipsePlugin.getDefault().getPreferenceStore();
 
+    BooleanFieldEditor showLineNumbers =
+      new BooleanFieldEditor(PHPeclipsePlugin.LINE_NUMBER_RULER, "Show line numbers", getFieldEditorParent());
+    this.addField(showLineNumbers);
+
     ColorFieldEditor multilineComment =
       new ColorFieldEditor(PHP_MULTILINE_COMMENT, "Multi-line comment:", this.getFieldEditorParent());
     this.addField(multilineComment);
index e120ce4..926ece6 100644 (file)
@@ -14,10 +14,12 @@ package net.sourceforge.phpeclipse;
 import java.util.MissingResourceException;
 import java.util.ResourceBundle;
 
+import net.sourceforge.phpdt.internal.ui.viewsupport.ImageDescriptorRegistry;
 import net.sourceforge.phpeclipse.phpeditor.PHPDocumentProvider;
 import net.sourceforge.phpeclipse.phpeditor.util.PHPColorProvider;
-import net.sourceforge.phpeclipse.resourcesview.*;
-
+import net.sourceforge.phpeclipse.resourcesview.PHPElement;
+import net.sourceforge.phpeclipse.resourcesview.PHPElementAdapterFactory;
+import net.sourceforge.phpeclipse.resourcesview.ResourceAdapterFactory;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.IWorkspace;
 import org.eclipse.core.resources.ResourcesPlugin;
@@ -63,6 +65,7 @@ public class PHPeclipsePlugin extends AbstractUIPlugin implements IPreferenceCon
   //Resource bundle.
   private ResourceBundle resourceBundle;
 
+  private ImageDescriptorRegistry fImageDescriptorRegistry;
   private PHPDocumentProvider fCompilationUnitDocumentProvider;
   /**
   * The Java virtual machine that we are running on.  
@@ -103,6 +106,15 @@ public class PHPeclipsePlugin extends AbstractUIPlugin implements IPreferenceCon
     }
   }
 
+  public static ImageDescriptorRegistry getImageDescriptorRegistry() {
+    return getDefault().internalGetImageDescriptorRegistry();
+  }
+
+  private ImageDescriptorRegistry internalGetImageDescriptorRegistry() {
+    if (fImageDescriptorRegistry == null)
+      fImageDescriptorRegistry= new ImageDescriptorRegistry();
+    return fImageDescriptorRegistry;
+  }
   // @TODO: refactor this into a better method name !
   public PHPDocumentProvider getCompilationUnitDocumentProvider() {
     if (fCompilationUnitDocumentProvider == null)
@@ -197,7 +209,10 @@ public class PHPeclipsePlugin extends AbstractUIPlugin implements IPreferenceCon
   //  public static void log(Throwable e) {
   //    log(new Status(IStatus.ERROR, getPluginId(), JavaStatusConstants.INTERNAL_ERROR, JavaUIMessages.getString("JavaPlugin.internal_error"), e)); //$NON-NLS-1$
   //  }
-  
+  public static void log(int severity, String message) {
+    Status status = new Status(severity, PLUGIN_ID, IStatus.OK, message, null) ;
+    log(status) ;
+  }
   public static void log(Throwable e) {
     log(new Status(IStatus.ERROR, PLUGIN_ID, IStatus.ERROR, "PHPeclipsePlugin.internalErrorOccurred", e)); //$NON-NLS-1$
   }
@@ -242,16 +257,17 @@ public class PHPeclipsePlugin extends AbstractUIPlugin implements IPreferenceCon
     } else {
       store.setDefault(EXTERNAL_BROWSER_PREF, "netscape {0}");
     }
+    store.setDefault(DOCUMENTROOT_PREF, getWorkspace().getRoot().getLocation().toString() );
+    // store.setDefault(DOCUMENTROOT_PREF, "c:\\eclipse\\workspace");  // WIN_32
+    // store.setDefault(DOCUMENTROOT_PREF, "/eclipse/workspace");      // UNIX
     if ((jvm == WINDOWS_9x) || (jvm == WINDOWS_NT)) {
       store.setDefault(EXTERNAL_PARSER_PREF, "c:\\apache\\php\\php -l -f {0}");
-      store.setDefault(DOCUMENTROOT_PREF, "c:\\eclipse\\workspace");
       store.setDefault(MYSQL_PREF, "c:\\apache\\mysql\\bin\\mysqld.exe --standalone");
       store.setDefault(APACHE_START_PREF, "c:\\apache\\apache.exe -c \"DocumentRoot \"{0}\"\"");
       store.setDefault(APACHE_STOP_PREF, "c:\\apache\\apache.exe -k shutdown");
       store.setDefault(APACHE_RESTART_PREF, "c:\\apache\\apache.exe -k restart");
     } else {
       store.setDefault(EXTERNAL_PARSER_PREF, "/apache/php/php -l -f {0}");
-      store.setDefault(DOCUMENTROOT_PREF, "/eclipse/workspace");
       store.setDefault(MYSQL_PREF, "/apache/mysql/bin/mysqld --standalone");
       store.setDefault(APACHE_START_PREF, "/apache/apache -c \"DocumentRoot \"{0}\"\"");
       store.setDefault(APACHE_STOP_PREF, "/apache/apache.exe -k shutdown");
@@ -264,6 +280,10 @@ public class PHPeclipsePlugin extends AbstractUIPlugin implements IPreferenceCon
     store.setDefault(PHP_EXTERNAL_PARSER, "true");
     
     store.setDefault(PHP_PARSE_ON_SAVE, "true");
+    
+    // show line numbers:
+    store.setDefault(LINE_NUMBER_RULER, "false");
+    
     // php syntax highlighting
     PreferenceConverter.setDefault(store, PHP_MULTILINE_COMMENT, PHPColorProvider.MULTI_LINE_COMMENT);
     PreferenceConverter.setDefault(store, PHP_SINGLELINE_COMMENT, PHPColorProvider.SINGLE_LINE_COMMENT);
@@ -273,7 +293,10 @@ public class PHPeclipsePlugin extends AbstractUIPlugin implements IPreferenceCon
     PreferenceConverter.setDefault(store, PHP_STRING, PHPColorProvider.STRING); 
     PreferenceConverter.setDefault(store, PHP_DEFAULT, PHPColorProvider.DEFAULT);
     PreferenceConverter.setDefault(store, LINKED_POSITION_COLOR, PHPColorProvider.LINKED_POSITION_COLOR);
+    PreferenceConverter.setDefault(store, LINE_NUMBER_COLOR, PHPColorProvider.LINE_NUMBER_COLOR);
 
+    store.setDefault(PREFERENCE_COLOR_BACKGROUND_SYSTEM_DEFAULT, "true");
+    PreferenceConverter.setDefault(store, PREFERENCE_COLOR_BACKGROUND, PHPColorProvider.BACKGROUND_COLOR);
   }
   
     public void startup() throws CoreException {
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/actions/PHPEclipseShowContextHelp.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/actions/PHPEclipseShowContextHelp.java
deleted file mode 100644 (file)
index bc03293..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-/**********************************************************************
-Copyright (c) 2000, 2002 IBM Corp. and others.
-All rights reserved. This program and the accompanying materials
-are made available under the terms of the Common Public License v1.0
-which accompanies this distribution, and is available at
-http://www.eclipse.org/legal/cpl-v10.html
-
-Contributors:
-    IBM Corporation - Initial implementation
-    Klaus Hartlage - www.eclipseproject.de
-**********************************************************************/
-package net.sourceforge.phpeclipse.actions;
-
-import net.sourceforge.phpeclipse.phpeditor.PHPEditor;
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.text.TextSelection;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.ui.IEditorActionDelegate;
-import org.eclipse.ui.IEditorPart;
-import org.eclipse.ui.IWorkbenchWindow;
-import org.eclipse.ui.actions.ActionDelegate;
-
-public class PHPEclipseShowContextHelp extends ActionDelegate implements IEditorActionDelegate {
-
-  private IWorkbenchWindow window;
-  private PHPEditor editor;
-
-  public void dispose() {
-  }
-
-  public void init(IWorkbenchWindow window) {
-    this.window = window;
-  }
-
-  public void selectionChanged(IAction action, ISelection selection) {
-    if (!selection.isEmpty()) {
-      if (selection instanceof TextSelection) {
-        action.setEnabled(true);
-      } else if (window.getActivePage() != null && window.getActivePage().getActivePart() != null) {
-        //
-      }
-    }
-  }
-
-  public void run(IAction action) {
-    if (editor == null) {
-      IEditorPart targetEditor = window.getActivePage().getActiveEditor();
-      if (targetEditor != null && (targetEditor instanceof PHPEditor)) {
-        editor = (PHPEditor) targetEditor;
-      }
-    }
-    if (editor != null) {
-      editor.openContextHelp();
-    }
-  }
-
-  public void setActiveEditor(IAction action, IEditorPart targetEditor) {
-    if (targetEditor != null && (targetEditor instanceof PHPEditor)) {
-      editor = (PHPEditor) targetEditor;
-    }
-  }
-
-}
index 86b9977..43e72ef 100644 (file)
@@ -16,13 +16,19 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.List;
-
-import org.eclipse.jface.text.BadLocationException;
+import java.util.TreeSet;
+
+import net.sourceforge.phpdt.internal.ui.viewsupport.ImageDescriptorRegistry;
+import net.sourceforge.phpeclipse.PHPeclipsePlugin;
+import net.sourceforge.phpeclipse.phpeditor.phpparser.PHPClassDeclaration;
+import net.sourceforge.phpeclipse.phpeditor.phpparser.PHPOutlineInfo;
+import net.sourceforge.phpeclipse.phpeditor.phpparser.PHPParser;
+import net.sourceforge.phpeclipse.phpeditor.phpparser.PHPSegment;
+import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.jface.text.BadPositionCategoryException;
 import org.eclipse.jface.text.DefaultPositionUpdater;
 import org.eclipse.jface.text.IDocument;
 import org.eclipse.jface.text.IPositionUpdater;
-import org.eclipse.jface.text.Position;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.ITreeContentProvider;
@@ -30,6 +36,7 @@ import org.eclipse.jface.viewers.LabelProvider;
 import org.eclipse.jface.viewers.SelectionChangedEvent;
 import org.eclipse.jface.viewers.TreeViewer;
 import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.ui.texteditor.IDocumentProvider;
@@ -43,26 +50,16 @@ import org.eclipse.ui.views.contentoutline.ContentOutlinePage;
 public class PHPContentOutlinePage extends ContentOutlinePage {
   private static final String ERROR = "error"; //$NON-NLS-1$
   private static final String WARNING = "warning"; //$NON-NLS-1$
-  /**
-   * A segment element.
-   */
-  protected static class Segment {
-    public String name;
-    public Position position;
-
-    public Segment(String name, Position position) {
-      this.name = name;
-      this.position = position;
-    }
-
-    public String toString() {
-      return name;
-    }
-  };
 
   protected static class SegmentComparator implements Comparator {
     public int compare(Object o1, Object o2) {
-      return ((Segment) o1).name.compareToIgnoreCase(((Segment) o2).name);
+      if (o1 instanceof PHPClassDeclaration && !(o2 instanceof PHPClassDeclaration)) {
+        return 1;
+      }
+      if (o2 instanceof PHPClassDeclaration && !(o1 instanceof PHPClassDeclaration)) {
+        return -1;
+      }
+      return ((PHPSegment) o1).toString().compareToIgnoreCase(((PHPSegment) o2).toString());
     }
   }
 
@@ -74,159 +71,47 @@ public class PHPContentOutlinePage extends ContentOutlinePage {
     protected final static String SEGMENTS = "__php_segments"; //$NON-NLS-1$
     protected IPositionUpdater fPositionUpdater = new DefaultPositionUpdater(SEGMENTS);
     protected List fContent = new ArrayList(10);
-    protected List fVariables = new ArrayList(100);
-
-    private String getIdentifier(String text, int firstIndex) {
-      int i = firstIndex;
-      char c;
-      int textLength = text.length();
-      StringBuffer identifier = new StringBuffer();
-      while (i < textLength) {
-        c = text.charAt(i++);
-        if (Character.isJavaIdentifierPart(c) || (c == '$')) {
-          identifier.append(c);
-        } else if ((i == firstIndex + 1) && (c == '$')) {
-          identifier.append(c);
-        } else {
-          return identifier.toString();
-        }
-      }
-      return null;
-    }
+    protected TreeSet fVariables = new TreeSet();
+
+    //    private String getIdentifier(String text, int firstIndex) {
+    //      int i = firstIndex;
+    //      char c;
+    //      int textLength = text.length();
+    //      StringBuffer identifier = new StringBuffer();
+    //      while (i < textLength) {
+    //        c = text.charAt(i++);
+    //        if (Character.isJavaIdentifierPart(c) || (c == '$')) {
+    //          identifier.append(c);
+    //        } else if ((i == firstIndex + 1) && (c == '$')) {
+    //          identifier.append(c);
+    //        } else {
+    //          return identifier.toString();
+    //        }
+    //      }
+    //      return null;
+    //    }
 
     protected void parse(IDocument document) {
 
-      int lines = document.getNumberOfLines();
-      int increment = Math.max(Math.round((float) (lines / 10)), 10);
+      //      int lines = document.getNumberOfLines();
+      //      int increment = Math.max(Math.round((float) (lines / 10)), 10);
 
+      String name;
+      int index;
       String text = document.get();
-      int lastIndex = 0;
-      int i = 0;
-      //      lastIndex = text.indexOf("function ", lastIndex);
-      //      while (lastIndex > 0) {
-      //
-      //        try {
-      //          i = lastIndex + 9;
-      //          while ((i < text.length()) && Character.isJavaIdentifierPart(text.charAt(i))) {
-      //            i++;
-      //          }
-      //          Position p = new Position(lastIndex, i - lastIndex);
-      //          document.addPosition(SEGMENTS, p);
-      //          fContent.add(new Segment(text.substring(lastIndex, i), p));
-      //          //     MessageFormat.format("function", new Object[] { new Integer(lastIndex)}), p)); //$NON-NLS-1$
-      //          lastIndex = text.indexOf("function", lastIndex + 1);
-      //        } catch (BadLocationException e) {
-      //        } catch (BadPositionCategoryException e) {
-      //        }
-      //
-      //      }
-
-      boolean lineCommentMode = false;
-      boolean multiLineCommentMode = false;
-      boolean stringMode = false;
-      boolean functionMode = false;
-      String identifier;
-      int c;
-      int c2;
-
-      int textLength = text.length() - 10;
-      while (i < textLength) {
-        c = text.charAt(i++);
-        if (c == '\n') {
-          lineCommentMode = false;
-          // read until end of line
-        } else if (c == '#') {
-          // read until end of line
-          lineCommentMode = true;
-          continue;
-        } else if (c == '/') {
-          c2 = text.charAt(i++);
-          if (c2 == '/') {
-            lineCommentMode = true;
-            continue;
-          } else if (c2 == '*') {
-            multiLineCommentMode = true;
-            continue;
-          } else {
-            i--;
-          }
-        } else if (c == '*' && multiLineCommentMode) {
-          c2 = text.charAt(i++);
-          if (c2 == '/') {
-            multiLineCommentMode = false;
-            continue;
-          } else {
-            i--;
-          }
-        } else if (c == '\\' && stringMode) {
-          c2 = text.charAt(i++);
-          if (c2 == '"') {
-            continue;
-          } else {
-            i--;
-          }
-        } else if (c == '"') {
-          if (stringMode) {
-            stringMode = false;
-          } else {
-            stringMode = true;
-          }
-          continue;
-        }
-        if (lineCommentMode || multiLineCommentMode || stringMode) {
-          continue;
-        }
+      PHPParser parser = new PHPParser(null);
 
-        if (functionMode && Character.isJavaIdentifierPart((char) c)) {
-          functionMode = false;
-          lastIndex = i - 1;
-          identifier = getIdentifier(text, lastIndex);
-          try {
-            i += identifier.length() - 1;
-            Position p = new Position(lastIndex, i - lastIndex);
-            document.addPosition(SEGMENTS, p);
-            fContent.add(new Segment(text.substring(lastIndex, i), p));
-            //     MessageFormat.format("function", new Object[] { new Integer(lastIndex)}), p)); //$NON-NLS-1$
-            //    lastIndex = text.indexOf("function", lastIndex + 1);
-          } catch (BadLocationException e) {
-          } catch (BadPositionCategoryException e) {
-          }
-
-        } else if (c == 'f') {
-          identifier = getIdentifier(text, i - 1);
-          if (identifier.equals("function")) {
-            functionMode = true;
-            i += 8;
-          }
-        } else if (c == '$') {
-          // get the variable name
-          identifier = getIdentifier(text, i - 1);
-          fVariables.add(identifier);
-        }
+      PHPOutlineInfo outlineInfo = parser.parseInfo(fInput, text);
+      fVariables = outlineInfo.getVariables();
 
+      PHPClassDeclaration declarations = outlineInfo.getDeclarations();
+      PHPSegment temp;
+      for (int i = 0; i < declarations.size(); i++) {
+        temp = declarations.get(i);
+        fContent.add(temp);
       }
       Collections.sort(fContent, new SegmentComparator());
-      Collections.sort(fVariables);
-
-      //                       for (int line = 0; line < lines; line += increment) {
-      //
-      //                               int length = increment;
-      //                               if (line + increment > lines)
-      //                                       length = lines - line;
-      //
-      //                               try {
-      //
-      //                                       int offset = document.getLineOffset(line);
-      //                                       int end = document.getLineOffset(line + length);
-      //                                       length = end - offset;
-      //                                       Position p = new Position(offset, length);
-      //                                       document.addPosition(SEGMENTS, p);
-      //                                       fContent.add(new Segment(MessageFormat.format(PHPEditorMessages.getString("OutlinePage.segment.title_pattern"), new Object[] { new Integer(offset)}), p)); //$NON-NLS-1$
-      //
-      //                               } catch (BadPositionCategoryException x) {
-      //                               } catch (BadLocationException x) {
-      //                               }
-      //                       }
+
     }
 
     /*
@@ -279,6 +164,13 @@ public class PHPContentOutlinePage extends ContentOutlinePage {
       return false;
     }
 
+    /**
+     * returns all PHP variables
+     */
+    public Object[] getVariables() {
+      return fVariables.toArray();
+    }
+
     /*
      * @see IStructuredContentProvider#getElements(Object)
      */
@@ -286,16 +178,13 @@ public class PHPContentOutlinePage extends ContentOutlinePage {
       return fContent.toArray();
     }
 
-    /**
-     * returns all PHP variables
-     */
-    public Object[] getVariables() {
-      return fVariables.toArray();
-    }
     /*
      * @see ITreeContentProvider#hasChildren(Object)
      */
     public boolean hasChildren(Object element) {
+      if (element instanceof PHPClassDeclaration) {
+        return !((PHPClassDeclaration) element).getList().isEmpty();
+      }
       return element == fInput;
     }
 
@@ -303,8 +192,9 @@ public class PHPContentOutlinePage extends ContentOutlinePage {
      * @see ITreeContentProvider#getParent(Object)
      */
     public Object getParent(Object element) {
-      if (element instanceof Segment)
-        return fInput;
+      if (element instanceof PHPSegment) {
+        return ((PHPSegment) element).getParent();
+      }
       return null;
     }
 
@@ -314,21 +204,49 @@ public class PHPContentOutlinePage extends ContentOutlinePage {
     public Object[] getChildren(Object element) {
       if (element == fInput)
         return fContent.toArray();
+      if (element instanceof PHPClassDeclaration)
+        return ((PHPClassDeclaration) element).getList().toArray();
       return new Object[0];
     }
   };
 
+  protected class OutlineLabelProvider extends LabelProvider {
+    private ImageDescriptorRegistry fRegistry;
+
+    public OutlineLabelProvider() {
+      fRegistry = PHPeclipsePlugin.getImageDescriptorRegistry();
+      ;
+    }
+    /**
+    * The <code>LabelProvider</code> implementation of this 
+    * <code>ILabelProvider</code> method returns <code>null</code>. Subclasses may 
+    * override.
+    */
+    public Image getImage(Object element) {
+      if (element instanceof PHPSegment) {
+        ImageDescriptor descriptor = ((PHPSegment) element).getImage();
+        return fRegistry.get(descriptor);
+      }
+      return null;
+    }
+  }
+
   protected Object fInput;
   protected IDocumentProvider fDocumentProvider;
   protected ITextEditor fTextEditor;
+  protected PHPEditor fEditor;
+  protected ContentProvider contentProvider;
 
   /**
    * Creates a content outline page using the given provider and the given editor.
    */
   public PHPContentOutlinePage(IDocumentProvider provider, ITextEditor editor) {
     super();
+    contentProvider = null;
     fDocumentProvider = provider;
     fTextEditor = editor;
+    if (editor instanceof PHPEditor)
+      fEditor = (PHPEditor) editor;
   }
 
   /* (non-Javadoc)
@@ -339,8 +257,11 @@ public class PHPContentOutlinePage extends ContentOutlinePage {
     super.createControl(parent);
 
     TreeViewer viewer = getTreeViewer();
-    viewer.setContentProvider(new ContentProvider());
-    viewer.setLabelProvider(new LabelProvider());
+
+    contentProvider = new ContentProvider();
+    viewer.setContentProvider(contentProvider);
+    viewer.setLabelProvider(new OutlineLabelProvider());
+
     viewer.addSelectionChangedListener(this);
 
     if (fInput != null)
@@ -358,9 +279,9 @@ public class PHPContentOutlinePage extends ContentOutlinePage {
     if (selection.isEmpty())
       fTextEditor.resetHighlightRange();
     else {
-      Segment segment = (Segment) ((IStructuredSelection) selection).getFirstElement();
-      int start = segment.position.getOffset();
-      int length = segment.position.getLength();
+      PHPSegment segment = (PHPSegment) ((IStructuredSelection) selection).getFirstElement();
+      int start = segment.getPosition().getOffset();
+      int length = segment.getPosition().getLength();
       try {
         fTextEditor.setHighlightRange(start, length, true);
       } catch (IllegalArgumentException x) {
@@ -393,4 +314,15 @@ public class PHPContentOutlinePage extends ContentOutlinePage {
       }
     }
   }
+  
+  public Object[] getVariables() {
+    if (contentProvider != null) {
+      return contentProvider.getVariables();
+    }
+    return null;
+  }
+  //  public ContentProvider getContentProvider() {
+  //    return contentProvider;
+  //  }
+
 }
index 71ff3fb..adcf53d 100644 (file)
@@ -11,9 +11,11 @@ Contributors:
     IBM Corporation - Initial implementation
     Klaus Hartlage - www.eclipseproject.de
 **********************************************************************/
+import net.sourceforge.phpeclipse.IPreferenceConstants;
 import net.sourceforge.phpeclipse.PHPeclipsePlugin;
 import net.sourceforge.phpeclipse.phpeditor.php.PHPCodeScanner;
 import net.sourceforge.phpeclipse.phpeditor.php.PHPWordExtractor;
+import net.sourceforge.phpeclipse.phpeditor.util.PHPColorProvider;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.help.IHelp;
@@ -22,14 +24,21 @@ import org.eclipse.jface.action.Action;
 import org.eclipse.jface.action.IAction;
 import org.eclipse.jface.action.MenuManager;
 import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.preference.PreferenceConverter;
 import org.eclipse.jface.text.BadLocationException;
 import org.eclipse.jface.text.IDocument;
 import org.eclipse.jface.text.ITextOperationTarget;
 import org.eclipse.jface.text.ITextSelection;
+import org.eclipse.jface.text.source.AnnotationRulerColumn;
+import org.eclipse.jface.text.source.CompositeRuler;
 import org.eclipse.jface.text.source.ISourceViewer;
+import org.eclipse.jface.text.source.IVerticalRuler;
+import org.eclipse.jface.text.source.IVerticalRulerColumn;
+import org.eclipse.jface.text.source.LineNumberRulerColumn;
 import org.eclipse.jface.util.IPropertyChangeListener;
 import org.eclipse.jface.util.PropertyChangeEvent;
 import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.RGB;
 import org.eclipse.ui.IEditorInput;
 import org.eclipse.ui.editors.text.TextEditor;
 import org.eclipse.ui.help.WorkbenchHelp;
@@ -38,13 +47,17 @@ import org.eclipse.ui.texteditor.ITextEditorActionConstants;
 import org.eclipse.ui.texteditor.TextOperationAction;
 import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
 /**
- * Java specific text editor.
+ * PHP specific text editor.
  */
 public class PHPEditor extends TextEditor {
 
   protected PHPActionGroup actionGroup;
   /** The outline page */
   private PHPContentOutlinePage fOutlinePage;
+  private IPreferenceStore phpPrefStore;
+
+  /** The line number ruler column */
+  private LineNumberRulerColumn fLineNumberRulerColumn;
 
   /**
    * Default constructor.
@@ -53,6 +66,9 @@ public class PHPEditor extends TextEditor {
     super();
   }
 
+  public PHPContentOutlinePage getfOutlinePage() {
+    return fOutlinePage; 
+  }
   /** The <code>JavaEditor</code> implementation of this 
    * <code>AbstractTextEditor</code> method extend the 
    * actions to add those specific to the receiver
@@ -114,7 +130,7 @@ public class PHPEditor extends TextEditor {
   public void doSave(IProgressMonitor monitor) {
     super.doSave(monitor);
     // compile or not, according to the user preferences
-    IPreferenceStore store = PHPeclipsePlugin.getDefault().getPreferenceStore();
+    IPreferenceStore store = phpPrefStore;
     if (store.getBoolean(PHPeclipsePlugin.PHP_PARSE_ON_SAVE)) {
       IAction a = PHPParserAction.getInstance();
       if (a != null)
@@ -150,8 +166,8 @@ public class PHPEditor extends TextEditor {
    */
   public void editorContextMenuAboutToShow(MenuManager menu) {
     super.editorContextMenuAboutToShow(menu);
-  //  addAction(menu, "ContentAssistProposal"); //$NON-NLS-1$
-  //  addAction(menu, "ContentAssistTip"); //$NON-NLS-1$
+    //  addAction(menu, "ContentAssistProposal"); //$NON-NLS-1$
+    //  addAction(menu, "ContentAssistTip"); //$NON-NLS-1$
     actionGroup.fillContextMenu(menu);
   }
 
@@ -205,11 +221,139 @@ public class PHPEditor extends TextEditor {
     return "";
   }
 
+  /*
+     * @see AbstractTextEditor#handlePreferenceStoreChanged(PropertyChangeEvent)
+     */
+  protected void handlePreferenceStoreChanged(PropertyChangeEvent event) {
+
+    try {
+
+      ISourceViewer sourceViewer = getSourceViewer();
+      if (sourceViewer == null)
+        return;
+
+      String property = event.getProperty();
+
+      //      if (JavaSourceViewerConfiguration.PREFERENCE_TAB_WIDTH.equals(property)) {
+      //        Object value= event.getNewValue();
+      //        if (value instanceof Integer) {
+      //          sourceViewer.getTextWidget().setTabs(((Integer) value).intValue());
+      //        } else if (value instanceof String) {
+      //          sourceViewer.getTextWidget().setTabs(Integer.parseInt((String) value));
+      //        }
+      //        return;
+      //      }
+
+      if (IPreferenceConstants.LINE_NUMBER_RULER.equals(property)) {
+        if (isLineNumberRulerVisible())
+          showLineNumberRuler();
+        else
+          hideLineNumberRuler();
+        return;
+      }
+
+      if (fLineNumberRulerColumn != null
+        && (IPreferenceConstants.LINE_NUMBER_COLOR.equals(property)
+          || PREFERENCE_COLOR_BACKGROUND_SYSTEM_DEFAULT.equals(property)
+          || PREFERENCE_COLOR_BACKGROUND.equals(property))) {
+
+        initializeLineNumberRulerColumn(fLineNumberRulerColumn);
+      }
+
+    } finally {
+      super.handlePreferenceStoreChanged(event);
+    }
+  }
+  /**
+   * Shows the line number ruler column.
+   */
+  private void showLineNumberRuler() {
+    IVerticalRuler v = getVerticalRuler();
+    if (v instanceof CompositeRuler) {
+      CompositeRuler c = (CompositeRuler) v;
+      c.addDecorator(1, createLineNumberRulerColumn());
+    }
+  }
+
+  /**
+  * Return whether the line number ruler column should be 
+  * visible according to the preference store settings.
+  * @return <code>true</code> if the line numbers should be visible
+  */
+  private boolean isLineNumberRulerVisible() {
+    // IPreferenceStore store= getPreferenceStore();
+    return phpPrefStore.getBoolean(IPreferenceConstants.LINE_NUMBER_RULER);
+  }
+  /**
+   * Hides the line number ruler column.
+   */
+  private void hideLineNumberRuler() {
+    IVerticalRuler v = getVerticalRuler();
+    if (v instanceof CompositeRuler) {
+      CompositeRuler c = (CompositeRuler) v;
+      c.removeDecorator(1);
+    }
+  }
+
+  /**
+  * Initializes the given line number ruler column from the preference store.
+  * @param rulerColumn the ruler column to be initialized
+  */
+  protected void initializeLineNumberRulerColumn(LineNumberRulerColumn rulerColumn) {
+    //   JavaTextTools textTools= JavaPlugin.getDefault().getJavaTextTools();
+    PHPColorProvider manager = PHPEditorEnvironment.getPHPColorProvider();
+
+    if (phpPrefStore != null) {
+
+      RGB rgb = null;
+      // foreground color
+      if (phpPrefStore.contains(IPreferenceConstants.LINE_NUMBER_COLOR)) {
+        if (phpPrefStore.isDefault(IPreferenceConstants.LINE_NUMBER_COLOR))
+          rgb = PreferenceConverter.getDefaultColor(phpPrefStore, IPreferenceConstants.LINE_NUMBER_COLOR);
+        else
+          rgb = PreferenceConverter.getColor(phpPrefStore, IPreferenceConstants.LINE_NUMBER_COLOR);
+      }
+      rulerColumn.setForeground(manager.getColor(rgb));
+
+      rgb = null;
+      // background color
+      if (!phpPrefStore.getBoolean(IPreferenceConstants.PREFERENCE_COLOR_BACKGROUND_SYSTEM_DEFAULT)) {
+        if (phpPrefStore.contains(IPreferenceConstants.PREFERENCE_COLOR_BACKGROUND)) {
+          if (phpPrefStore.isDefault(IPreferenceConstants.PREFERENCE_COLOR_BACKGROUND))
+            rgb = PreferenceConverter.getDefaultColor(phpPrefStore, IPreferenceConstants.PREFERENCE_COLOR_BACKGROUND);
+          else
+            rgb = PreferenceConverter.getColor(phpPrefStore, IPreferenceConstants.PREFERENCE_COLOR_BACKGROUND);
+        }
+        rulerColumn.setBackground(manager.getColor(rgb));
+      }
+
+    }
+  }
+
+  /**
+   * Creates a new line number ruler column that is appropriately initialized.
+   */
+  protected IVerticalRulerColumn createLineNumberRulerColumn() {
+    fLineNumberRulerColumn = new LineNumberRulerColumn();
+    initializeLineNumberRulerColumn(fLineNumberRulerColumn);
+    return fLineNumberRulerColumn;
+  }
+
+  /*
+   * @see AbstractTextEditor#createVerticalRuler()
+   */
+  protected IVerticalRuler createVerticalRuler() {
+    CompositeRuler ruler = new CompositeRuler();
+    ruler.addDecorator(0, new AnnotationRulerColumn(VERTICAL_RULER_WIDTH));
+    if (isLineNumberRulerVisible())
+      ruler.addDecorator(1, createLineNumberRulerColumn());
+    return ruler;
+  }
+
   /* (non-Javadoc)
    * Method declared on AbstractTextEditor
    */
   protected void initializeEditor() {
-
     PHPEditorEnvironment.connect(this);
 
     setSourceViewerConfiguration(new PHPSourceViewerConfiguration());
@@ -217,8 +361,9 @@ public class PHPEditor extends TextEditor {
     setEditorContextMenuId("#PHPEditorContext"); //$NON-NLS-1$
     setRulerContextMenuId("#PHPRulerContext"); //$NON-NLS-1$
     // setDocumentProvider(PHPeclipsePlugin.getCompilationUnitDocumentProvider());
+    phpPrefStore = PHPeclipsePlugin.getDefault().getPreferenceStore();
 
-    PHPeclipsePlugin.getDefault().getPreferenceStore().addPropertyChangeListener(new IPropertyChangeListener() {
+    phpPrefStore.addPropertyChangeListener(new IPropertyChangeListener() {
       public void propertyChange(PropertyChangeEvent event) {
         PHPCodeScanner scanner = PHPEditorEnvironment.getPHPCodeScanner();
         if (scanner != null) {
@@ -227,6 +372,15 @@ public class PHPEditor extends TextEditor {
         if (getSourceViewer() != null) {
           getSourceViewer().invalidateTextPresentation();
         }
+
+        String property = event.getProperty();
+        if (IPreferenceConstants.LINE_NUMBER_RULER.equals(property)) {
+          if (isLineNumberRulerVisible())
+            showLineNumberRuler();
+          else
+            hideLineNumberRuler();
+          return;
+        }
       }
     });
   }
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPFunctionHelpResource.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPFunctionHelpResource.java
deleted file mode 100644 (file)
index e14fcdf..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-/**********************************************************************
-Copyright (c) 2000, 2002 IBM Corp. and others.
-All rights reserved. This program and the accompanying materials
-are made available under the terms of the Common Public License v1.0
-which accompanies this distribution, and is available at
-http://www.eclipse.org/legal/cpl-v10.html
-
-Contributors:
-    IBM Corporation - Initial implementation
-    Klaus Hartlage - www.eclipseproject.de
-**********************************************************************/
-package net.sourceforge.phpeclipse.phpeditor;
-
-import org.eclipse.help.IHelpResource;
-
-/**
- * Example implementation for an <code>ITextHover</code> 
- * which hovers over PHP code.
- */
-public class PHPFunctionHelpResource implements IHelpResource {
-
-  private String word;
-
-  public PHPFunctionHelpResource(String word) {
-    this.word = word;
-  }
-
-  public String getHref() {
-    return "/net.sourceforge.phpeclipse/doc/function." + word + ".html";
-  }
-
-  public String getLabel() {
-    return "PHP Context Help";
-  }
-
-}
\ No newline at end of file
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPParser.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPParser.java
deleted file mode 100644 (file)
index a1282df..0000000
+++ /dev/null
@@ -1,2661 +0,0 @@
-/**********************************************************************
-Copyright (c) 2002 Klaus Hartlage - www.eclipseproject.de
-All rights reserved. This program and the accompanying materials
-are made available under the terms of the Common Public License v1.0
-which accompanies this distribution, and is available at
-http://www.eclipse.org/legal/cpl-v10.html
-
-Contributors:
-    Klaus Hartlage - www.eclipseproject.de
-**********************************************************************/
-package net.sourceforge.phpeclipse.phpeditor;
-
-import java.text.MessageFormat;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Hashtable;
-
-import net.sourceforge.phpeclipse.PHPeclipsePlugin;
-import net.sourceforge.phpeclipse.actions.PHPStartApacheAction;
-import net.sourceforge.phpeclipse.phpeditor.php.PHPKeywords;
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IMarker;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.ui.texteditor.MarkerUtilities;
-
-public class PHPParser extends PHPKeywords {
-  // strings for external parser call
-  private static final String PARSE_ERROR_STRING = "Parse error"; //$NON-NLS-1$
-  private static final String PARSE_WARNING_STRING = "Warning"; //$NON-NLS-1$
-
-  public static final int ERROR = 2;
-  public static final int WARNING = 1;
-  public static final int INFO = 0;
-  private IFile fileToParse;
-  private ArrayList phpList;
-
-  private int currentPHPString;
-  private boolean phpEnd;
-
-  private static HashMap keywordMap = null;
-  private String str;
-
-  // current character
-  char ch;
-  // current token
-  int token;
-
-  // row counter for syntax errors:
-  int rowCount;
-  // column counter for syntax errors:
-  int columnCount;
-
-  int chIndx;
-
-  // current identifier
-  String identifier;
-
-  Long longNumber;
-  Double doubleNumber;
-
-  final static int TT_EOF = 0;
-  final static int TT_UNDEFINED = 1;
-
-  final static int TT_MOD = 30;
-  final static int TT_NOT = 31;
-  final static int TT_DOT = 32;
-  final static int TT_POW = 33;
-  final static int TT_DIV = 34;
-  final static int TT_MULTIPLY = 35;
-  final static int TT_SUBTRACT = 36;
-  final static int TT_ADD = 37;
-  final static int TT_EQUAL = 38;
-  final static int TT_UNEQUAL = 39;
-  final static int TT_GREATER = 40;
-  final static int TT_GREATEREQUAL = 41;
-  final static int TT_LESS = 42;
-  final static int TT_LESSEQUAL = 43;
-  final static int TT_AND = 44;
-  final static int TT_OR = 45;
-  final static int TT_HASH = 46;
-  final static int TT_DDOT = 47;
-  final static int TT_DOTASSIGN = 48;
-
-  final static int TT_ASSIGN = 49;
-  final static int TT_REF = 50;
-  final static int TT_FOREACH = 51;
-  final static int TT_AMPERSAND = 52;
-  final static int TT_DOLLARLISTOPEN = 53;
-  final static int TT_TILDE = 54;
-  final static int TT_TILDEASSIGN = 55;
-  final static int TT_MODASSIGN = 56;
-  final static int TT_POWASSIGN = 57;
-  final static int TT_RSHIFTASSIGN = 58;
-  final static int TT_LSHIFTASSIGN = 59;
-  final static int TT_ANDASSIGN = 60;
-  final static int TT_QUESTIONMARK = 61;
-  final static int TT_DDOT2 = 62;
-  final static int TT_AT = 63;
-  // final static int TT_HEREDOC = 64;
-
-  final static int TT_DOLLAROPEN = 127;
-  final static int TT_ARGOPEN = 128;
-  final static int TT_ARGCLOSE = 129;
-  final static int TT_LISTOPEN = 130;
-  final static int TT_LISTCLOSE = 131;
-  final static int TT_PARTOPEN = 132;
-  final static int TT_PARTCLOSE = 133;
-  final static int TT_COMMA = 134;
-
-  final static int TT_STRING = 136;
-  final static int TT_IDENTIFIER = 138;
-  final static int TT_DIGIT = 139;
-  final static int TT_SEMICOLON = 140;
-  final static int TT_SLOT = 141;
-  final static int TT_SLOTSEQUENCE = 142;
-  final static int TT_DECREMENT = 144;
-  final static int TT_INCREMENT = 145;
-  final static int TT_ADDTO = 146;
-  final static int TT_DIVIDEBY = 147;
-  final static int TT_SUBTRACTFROM = 148;
-  final static int TT_TIMESBY = 149;
-  final static int TT_VARIABLE = 150;
-  final static int TT_INT_NUMBER = 151;
-  final static int TT_DOUBLE_NUMBER = 152;
-  final static int TT_INTERPOLATED_STRING = 153;
-  final static int TT_STRING_CONSTANT = 154;
-
-  final static int TT_LSHIFT = 155;
-  final static int TT_RSHIFT = 156;
-  final static int TT_EX_EQUAL = 157;
-  final static int TT_EX_UNEQUAL = 158;
-  final static int TT_LINE = 159;
-  //  final static int TT_AT = 153; // @
-  /**
-   *  Class Constructor.
-   *
-   *@param  s
-   *@param  sess  Description of Parameter
-   *@see
-   */
-  public PHPParser(IFile fileToParse) {
-    if (keywordMap == null) {
-      keywordMap = new HashMap();
-      for (int i = 0; i < PHP_KEYWORS.length; i++) {
-        keywordMap.put(PHP_KEYWORS[i], new Integer(PHP_KEYWORD_TOKEN[i]));
-      }
-    }
-    this.currentPHPString = 0;
-    this.fileToParse = fileToParse;
-    this.phpList = null;
-    this.str = "";
-    this.token = TT_EOF;
-    this.chIndx = 0;
-    this.rowCount = 1;
-    this.columnCount = 0;
-    this.phpEnd = false;
-
-    //   getNextToken();
-  }
-
-  /**
-   * Create marker for the parse error
-   */
-  private void setMarker(String message, int lineNumber, int errorLevel) throws CoreException {
-    setMarker(fileToParse, message, lineNumber, errorLevel);
-  }
-
-  public static void setMarker(IFile file, String message, int lineNumber, int errorLevel) throws CoreException {
-
-    Hashtable attributes = new Hashtable();
-    MarkerUtilities.setMessage(attributes, message);
-    switch (errorLevel) {
-      case ERROR :
-        attributes.put(IMarker.SEVERITY, new Integer(IMarker.SEVERITY_ERROR));
-        break;
-      case WARNING :
-        attributes.put(IMarker.SEVERITY, new Integer(IMarker.SEVERITY_WARNING));
-        break;
-      case INFO :
-        attributes.put(IMarker.SEVERITY, new Integer(IMarker.SEVERITY_INFO));
-        break;
-    }
-    MarkerUtilities.setLineNumber(attributes, lineNumber);
-    MarkerUtilities.createMarker(file, attributes, IMarker.PROBLEM);
-  }
-
-  private void throwSyntaxError(String error) {
-
-    if (str.length() < chIndx) {
-      chIndx--;
-    }
-    // read until end-of-line
-    int eol = chIndx;
-    while (str.length() > eol) {
-      ch = str.charAt(eol++);
-      if (ch == '\n') {
-        eol--;
-        break;
-      }
-    }
-    throw new SyntaxError(rowCount, chIndx - columnCount + 1, str.substring(columnCount, eol), error);
-  }
-
-  private void throwSyntaxError(String error, int startRow) {
-
-    throw new SyntaxError(startRow, 0, " ", error);
-  }
-
-  /**
-   *  Method Declaration.
-   *
-   *@see
-   */
-  private void getChar() {
-    if (str.length() > chIndx) {
-      ch = str.charAt(chIndx++);
-
-      return;
-    }
-
-    chIndx = str.length() + 1;
-    ch = ' ';
-    //  token = TT_EOF;
-    phpEnd = true;
-  }
-
-  /**
-   * gets the next token from input
-   */
-  private void getNextToken() throws CoreException {
-    phpEnd = false;
-
-    while (str.length() > chIndx) {
-      ch = str.charAt(chIndx++);
-      token = TT_UNDEFINED;
-      if (ch == '\n') {
-        rowCount++;
-        columnCount = chIndx;
-        continue; // while loop
-      }
-      if (str.length() == chIndx) {
-        phpEnd = true;
-      }
-      if (!Character.isWhitespace(ch)) {
-        if (ch == '$') {
-          if (str.length() > chIndx) {
-            if (str.charAt(chIndx) == '{') {
-              chIndx++;
-              token = TT_DOLLAROPEN;
-              return;
-            }
-          }
-          getIdentifier();
-          return;
-        }
-        if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') || (ch == '_') || (ch == '$')) {
-          getIdentifier();
-          return;
-        }
-        if (ch >= '0' && ch <= '9') {
-          getNumber();
-          return;
-        }
-        if (ch == '/') {
-          if (str.length() > chIndx) {
-            if (str.charAt(chIndx) == '/') {
-              chIndx++;
-              // read comment until end of line:
-              while ((str.length() > chIndx) && (str.charAt(chIndx) != '\n')) {
-                chIndx++;
-              }
-              continue;
-            } else if (str.charAt(chIndx) == '*') {
-              chIndx++;
-              // multi line comment:
-              while (str.length() > chIndx) {
-                if (str.charAt(chIndx) == '*' && (str.length() > (chIndx + 1)) && str.charAt(chIndx + 1) == '/') {
-                  chIndx += 2;
-                  break;
-                }
-                ch = str.charAt(chIndx++);
-                if (ch == '\n') {
-                  rowCount++;
-                  columnCount = chIndx;
-                }
-              }
-              continue;
-            }
-          }
-        } else if (ch == '#') {
-          // read comment until end of line:
-          while ((str.length() > chIndx) && (str.charAt(chIndx) != '\n')) {
-            chIndx++;
-          }
-          continue;
-        } else if (ch == '"') {
-          // read string until end
-          boolean openString = true;
-          while (str.length() > chIndx) {
-            ch = str.charAt(chIndx++);
-            if (ch == '\\') {
-              if (str.length() > chIndx) {
-                ch = str.charAt(chIndx++);
-              }
-            } else if (ch == '"') {
-              openString = false;
-              break;
-            } else if (ch == '\n') {
-              rowCount++;
-              columnCount = chIndx;
-            }
-          }
-          if (openString) {
-            throwSyntaxError("Open string character '\"' at end of file.");
-          }
-          token = TT_INTERPOLATED_STRING;
-          return;
-        } else if (ch == '\'') {
-          // read string until end
-          boolean openString = true;
-          int startRow = rowCount;
-          while (str.length() > chIndx) {
-            ch = str.charAt(chIndx++);
-            if (ch == '\\') {
-              if (str.length() > chIndx) {
-                ch = str.charAt(chIndx++);
-              }
-            } else if (ch == '\'') {
-              openString = false;
-              break;
-            } else if (ch == '\n') {
-              rowCount++;
-              columnCount = chIndx;
-            }
-          }
-          if (openString) {
-            throwSyntaxError("Open string character \"'\" at end of file.", startRow);
-          }
-          token = TT_STRING_CONSTANT;
-          return;
-        } else if (ch == '`') {
-          // read string until end
-          boolean openString = true;
-          int startRow = rowCount;
-          while (str.length() > chIndx) {
-            ch = str.charAt(chIndx++);
-            if (ch == '\\') {
-              if (str.length() > chIndx) {
-                ch = str.charAt(chIndx++);
-              }
-            } else if (ch == '`') {
-              openString = false;
-              break;
-            } else if (ch == '\n') {
-              rowCount++;
-              columnCount = chIndx;
-            }
-          }
-          if (openString) {
-            throwSyntaxError("Open string character \"`\" at end of file.", startRow);
-          }
-          setMarker("Other string delimiters prefered (found \"`\").", rowCount, PHPParser.INFO);
-          token = TT_STRING_CONSTANT;
-          return;
-        }
-
-        switch (ch) {
-
-          case '(' :
-            token = TT_ARGOPEN;
-
-            break;
-          case ')' :
-            token = TT_ARGCLOSE;
-
-            break;
-          case '{' :
-            token = TT_LISTOPEN;
-
-            break;
-          case '}' :
-            token = TT_LISTCLOSE;
-
-            break;
-          case '[' :
-            token = TT_PARTOPEN;
-
-            break;
-          case ']' :
-            token = TT_PARTCLOSE;
-
-            break;
-          case ',' :
-            token = TT_COMMA;
-
-            break;
-          case '?' :
-            token = TT_QUESTIONMARK;
-            break;
-          case '@' :
-            token = TT_AT;
-            break;
-          case '~' :
-            token = TT_TILDE;
-            if (str.length() > chIndx) {
-              if (str.charAt(chIndx) == '=') {
-                chIndx++;
-                token = TT_TILDEASSIGN;
-
-                break;
-              }
-            }
-            break;
-          case '.' :
-            token = TT_DOT;
-            if (str.length() > chIndx) {
-              if (str.charAt(chIndx) == '=') {
-                chIndx++;
-                token = TT_DOTASSIGN;
-
-                break;
-              }
-            }
-
-            break;
-          case '"' :
-            token = TT_STRING;
-
-            break;
-          case '%' :
-            token = TT_MOD;
-            if (str.length() > chIndx) {
-              if (str.charAt(chIndx) == '=') {
-                chIndx++;
-                token = TT_MODASSIGN;
-
-                break;
-              }
-            }
-            break;
-          case ';' :
-            token = TT_SEMICOLON;
-
-            break;
-          case '^' :
-            token = TT_POW;
-            if (str.length() > chIndx) {
-              if (str.charAt(chIndx) == '=') {
-                chIndx++;
-                token = TT_POWASSIGN;
-
-                break;
-              }
-            }
-            break;
-          case '/' :
-            token = TT_DIV;
-
-            if (str.length() > chIndx) {
-              if (str.charAt(chIndx) == '=') {
-                chIndx++;
-                token = TT_DIVIDEBY;
-
-                break;
-              }
-            }
-
-            break;
-          case '*' :
-            token = TT_MULTIPLY;
-            if (str.length() > chIndx) {
-              if (str.charAt(chIndx) == '*') {
-                chIndx++;
-                token = TT_POW;
-
-                break;
-              }
-              if (str.charAt(chIndx) == '=') {
-                chIndx++;
-                token = TT_TIMESBY;
-
-                break;
-              }
-            }
-
-            break;
-          case '+' :
-            token = TT_ADD;
-            if (str.length() > chIndx) {
-              if (str.charAt(chIndx) == '+') {
-                chIndx++;
-                token = TT_INCREMENT;
-
-                break;
-              }
-              if (str.charAt(chIndx) == '=') {
-                chIndx++;
-                token = TT_ADDTO;
-
-                break;
-              }
-            }
-            break;
-          case '-' :
-            token = TT_SUBTRACT;
-            if (str.length() > chIndx) {
-              if (str.charAt(chIndx) == '-') {
-                chIndx++;
-                token = TT_DECREMENT;
-
-                break;
-              }
-              if (str.charAt(chIndx) == '=') {
-                chIndx++;
-                token = TT_SUBTRACTFROM;
-
-                break;
-              }
-              if (str.charAt(chIndx) == '>') {
-                chIndx++;
-                token = TT_REF;
-
-                break;
-              }
-            }
-
-            break;
-          case '=' :
-            token = TT_ASSIGN;
-
-            if (str.length() > chIndx) {
-              ch = str.charAt(chIndx);
-
-              if (ch == '=') {
-                chIndx++;
-                token = TT_EQUAL;
-                if (str.length() > chIndx) {
-                  ch = str.charAt(chIndx);
-
-                  if (ch == '=') {
-                    chIndx++;
-                    token = TT_EX_EQUAL;
-                  }
-                }
-                break;
-              }
-              if (ch == '>') {
-                chIndx++;
-                token = TT_FOREACH;
-
-                break;
-              }
-            }
-
-            break;
-          case '!' :
-            token = TT_NOT;
-
-            if (str.length() > chIndx) {
-              if (str.charAt(chIndx) == '=') {
-                chIndx++;
-                token = TT_UNEQUAL;
-                if (str.length() > chIndx) {
-                  ch = str.charAt(chIndx);
-
-                  if (ch == '=') {
-                    chIndx++;
-                    token = TT_EX_UNEQUAL;
-                  }
-                }
-                break;
-              }
-            }
-
-            break;
-          case '>' :
-            token = TT_GREATER;
-
-            if (str.length() > chIndx) {
-              if (str.charAt(chIndx) == '=') {
-                chIndx++;
-                token = TT_GREATEREQUAL;
-                break;
-              }
-              if (str.charAt(chIndx) == '>') {
-                chIndx++;
-                token = TT_RSHIFT;
-                if (str.length() > chIndx) {
-                  if (str.charAt(chIndx) == '=') {
-                    chIndx++;
-                    token = TT_RSHIFTASSIGN;
-                    break;
-                  }
-                }
-                break;
-              }
-            }
-
-            break;
-          case '<' :
-            token = TT_LESS;
-
-            if (str.length() > chIndx) {
-              if (str.charAt(chIndx) == '=') {
-                chIndx++;
-                token = TT_LESSEQUAL;
-
-                break;
-              }
-              if (str.charAt(chIndx) == '<') {
-                chIndx++;
-                token = TT_LSHIFT;
-                if (str.charAt(chIndx) == '<') {
-                  // heredoc
-                  int startRow = rowCount;
-                  if (str.length() > chIndx) {
-
-                    ch = str.charAt(++chIndx);
-                    if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') || (ch == '_')) {
-                      chIndx++;
-                      getIdentifier();
-                      token = TT_STRING_CONSTANT;
-                      while (str.length() > chIndx) {
-                        ch = str.charAt(chIndx++);
-                        if (ch == '\n') {
-                          if (str.length() >= chIndx + identifier.length()) {
-                            if (str.substring(chIndx, chIndx + identifier.length()).equals(identifier)) {
-                              chIndx += identifier.length();
-                              return;
-                            }
-                          }
-                        }
-                      }
-                    }
-                  }
-                  throwSyntaxError("Open heredoc syntax after operator '<<<'.", startRow);
-                } else if (str.charAt(chIndx) == '=') {
-                  chIndx++;
-                  token = TT_LSHIFTASSIGN;
-                  break;
-                }
-                break;
-              }
-            }
-
-            break;
-
-          case '|' :
-            token = TT_LINE;
-
-            if (str.length() > chIndx) {
-              if (str.charAt(chIndx) == '|') {
-                chIndx++;
-                token = TT_OR;
-
-                break;
-              }
-            }
-
-            break;
-          case '&' :
-            token = TT_AMPERSAND;
-            if (str.length() > chIndx) {
-              if (str.charAt(chIndx) == '&') {
-                chIndx++;
-                token = TT_AND;
-                break;
-              }
-              if (str.charAt(chIndx) == '=') {
-                chIndx++;
-                token = TT_ANDASSIGN;
-                break;
-              }
-              break;
-            }
-
-            break;
-          case ':' :
-            token = TT_DDOT;
-            if (str.length() > chIndx) {
-              if (str.charAt(chIndx) == ':') {
-                chIndx++;
-                token = TT_DDOT2;
-              }
-            }
-            break;
-          case '#' :
-            token = TT_HASH;
-
-            break;
-            //          case '@' :
-            //            token = TT_AT;
-            //
-            //            break;
-          default :
-            throwSyntaxError("unexpected character: '" + ch + "'");
-        }
-
-        if (token == TT_UNDEFINED) {
-          throwSyntaxError("token not found");
-        }
-
-        return;
-      }
-    }
-
-    chIndx = str.length() + 1;
-    ch = ' ';
-    token = TT_EOF;
-    phpEnd = true;
-    PHPString temp;
-    if (phpList != null) {
-      if (currentPHPString < phpList.size()) {
-        token = TT_UNDEFINED;
-        temp = (PHPString) phpList.get(currentPHPString++);
-        this.str = temp.getPHPString();
-        this.token = TT_EOF;
-        this.chIndx = 0;
-        this.rowCount = temp.getLineNumber();
-        this.columnCount = 0;
-        getNextToken();
-        phpEnd = true;
-      } else {
-        token = TT_UNDEFINED;
-        return;
-      }
-    }
-  }
-
-  private void getIdentifier() {
-    StringBuffer ident = new StringBuffer();
-
-    ident.append(ch);
-    if (ch == '$') {
-      token = TT_VARIABLE;
-    } else {
-      token = TT_IDENTIFIER;
-    }
-    getChar();
-    while ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') || (ch >= '0' && ch <= '9') || (ch == '_')) {
-      ident.append(ch);
-      getChar();
-    }
-    identifier = ident.toString();
-    chIndx--;
-
-    Integer i = (Integer) keywordMap.get(identifier.toLowerCase());
-    if (i != null) {
-      token = i.intValue();
-    }
-  }
-
-  private void getNumber() {
-    StringBuffer inum = new StringBuffer();
-    char dFlag = ' ';
-    int numFormat = 10;
-
-    // save first digit
-    char firstCh = ch;
-    inum.append(ch);
-
-    getChar();
-    // determine number conversions:
-    if (firstCh == '0') {
-      switch (ch) {
-        case 'b' :
-          numFormat = 2;
-          getChar();
-          break;
-        case 'B' :
-          numFormat = 2;
-          getChar();
-          break;
-        case 'o' :
-          numFormat = 8;
-          getChar();
-          break;
-        case 'O' :
-          numFormat = 8;
-          getChar();
-          break;
-        case 'x' :
-          numFormat = 16;
-          getChar();
-          break;
-        case 'X' :
-          numFormat = 16;
-          getChar();
-          break;
-      }
-    }
-
-    if (numFormat == 16) {
-      while ((ch >= '0' && ch <= '9') || (ch >= 'a' && ch <= 'f') || (ch >= 'A' && ch <= 'F')) {
-        inum.append(ch);
-        getChar();
-      }
-    } else {
-      while ((ch >= '0' && ch <= '9') || (ch == '.') || (ch == 'E') || (ch == 'e')) {
-        if ((ch == '.') || (ch == 'E') || (ch == 'e')) {
-          if (ch == '.' && dFlag != ' ') {
-            break;
-          }
-          if ((dFlag == 'E') || (dFlag == 'e')) {
-            break;
-          }
-          dFlag = ch;
-          inum.append(ch);
-          getChar();
-          if ((ch == '-') || (ch == '+')) {
-            inum.append(ch);
-            getChar();
-          }
-        } else {
-          inum.append(ch);
-          getChar();
-        }
-      }
-    }
-    chIndx--;
-
-    try {
-      if (dFlag != ' ') {
-        doubleNumber = new Double(inum.toString());
-        token = TT_DOUBLE_NUMBER;
-        return;
-      } else {
-        longNumber = Long.valueOf(inum.toString(), numFormat);
-        token = TT_INT_NUMBER;
-        return;
-      }
-
-    } catch (Throwable e) {
-      throwSyntaxError("Number format error: " + inum.toString());
-    }
-  }
-
-  public void htmlParse(String input) {
-    int lineNumber = 1;
-    int startLineNumber = 1;
-    int startIndex = 0;
-    char ch;
-    char ch2;
-    boolean phpMode = false;
-    boolean phpFound = false;
-
-    phpList = new ArrayList();
-    currentPHPString = 0;
-
-    try {
-      int i = 0;
-      while (i < input.length()) {
-        ch = input.charAt(i++);
-        if (ch == '\n') {
-          lineNumber++;
-        }
-        if ((!phpMode) && ch == '<') {
-          ch2 = input.charAt(i++);
-          if (ch2 == '?') {
-            ch2 = input.charAt(i++);
-            if (Character.isWhitespace(ch2)) {
-              // php start 
-              phpMode = true;
-              phpFound = true;
-              startIndex = i;
-              startLineNumber = lineNumber;
-              continue;
-            } else if (ch2 == 'p') {
-              ch2 = input.charAt(i++);
-              if (ch2 == 'h') {
-                ch2 = input.charAt(i++);
-                if (ch2 == 'p') {
-                  phpMode = true;
-                  phpFound = true;
-                  startIndex = i;
-                  startLineNumber = lineNumber;
-                  continue;
-                }
-                i--;
-              }
-              i--;
-            } else if (ch2 == 'P') {
-              ch2 = input.charAt(i++);
-              if (ch2 == 'H') {
-                ch2 = input.charAt(i++);
-                if (ch2 == 'P') {
-                  phpMode = true;
-                  phpFound = true;
-                  startIndex = i;
-                  startLineNumber = lineNumber;
-                  continue;
-                }
-                i--;
-              }
-              i--;
-            }
-            i--;
-          }
-          i--;
-        }
-
-        if (phpMode) {
-          if (ch == '/' && i < input.length()) {
-            ch2 = input.charAt(i++);
-            if (ch2 == '/') {
-              while (i < input.length()) {
-                ch = input.charAt(i++);
-                if (ch == '?' && i < input.length()) {
-                  ch2 = input.charAt(i++);
-                  if (ch2 == '>') {
-                    // php end
-                    phpMode = false;
-                    phpList.add(new PHPString(input.substring(startIndex, i - 2), startLineNumber));
-                    continue;
-                  }
-                  i--;
-                } else if (ch == '\n') {
-                  lineNumber++;
-                  break;
-                }
-              }
-              continue;
-            } else if (ch2 == '*') {
-              // multi-line comment
-              while (i < input.length()) {
-                ch = input.charAt(i++);
-                if (ch == '\n') {
-                  lineNumber++;
-                } else if (ch == '*' && i < input.length()) {
-                  ch2 = input.charAt(i++);
-                  if (ch2 == '/') {
-                    break;
-                  }
-                  i--;
-                }
-              }
-              continue;
-            } else {
-              i--;
-            }
-          } else if (ch == '#') {
-            while (i < input.length()) {
-              ch = input.charAt(i++);
-              if (ch == '?' && i < input.length()) {
-                ch2 = input.charAt(i++);
-                if (ch2 == '>') {
-                  // php end
-                  phpMode = false;
-                  phpList.add(new PHPString(input.substring(startIndex, i - 2), startLineNumber));
-                  continue;
-                }
-                i--;
-              } else if (ch == '\n') {
-                lineNumber++;
-                break;
-              }
-            }
-            continue;
-          } else if (ch == '"') {
-            ch = ' ';
-            while (i < input.length()) {
-              ch = input.charAt(i++);
-              if (ch == '\n') {
-                lineNumber++;
-              } else if (ch == '\\' && i < input.length()) { // escape
-                i++;
-              } else if (ch == '"') {
-                break;
-              }
-            }
-            continue;
-          } else if (ch == '\'') {
-            ch = ' ';
-            while (i < input.length()) {
-              ch = input.charAt(i++);
-              if (ch == '\n') {
-                lineNumber++;
-              } else if (ch == '\\' && i < input.length()) { // escape
-                i++;
-              } else if (ch == '\'') {
-                break;
-              }
-            }
-            continue;
-          }
-
-          if (ch == '?' && i < input.length()) {
-            ch2 = input.charAt(i++);
-            if (ch2 == '>') {
-              // php end
-              phpMode = false;
-              phpList.add(new PHPString(input.substring(startIndex, i - 2), startLineNumber));
-              continue;
-            }
-            i--;
-          }
-        }
-      }
-
-      if (!phpFound) {
-        setMarker("No PHP source code found.", lineNumber, PHPParser.INFO);
-      } else {
-        if (phpMode) {
-          setMarker("Open PHP tag at end of file.", lineNumber, PHPParser.INFO);
-          phpList.add(new PHPString(input.substring(startIndex, i - 2), startLineNumber));
-        }
-        //        for (int j=0;j<phpList.size();j++) {
-        //          String temp = ((PHPString)phpList.get(j)).getPHPString();
-        //          int startIndx = temp.length()-10;
-        //          if (startIndx<0) {
-        //            startIndx = 0; 
-        //          }
-        //          System.out.println(temp.substring(startIndx)+"?>");
-        //        }
-        phpParse(null, 1);
-        //        PHPString temp;
-        //        for(int j=0;j<phpList.size();j++) {
-        //          temp = (PHPString) phpList.get(j);
-        //          parser.start(temp.getPHPString(), temp.getLineNumber());
-        //        } 
-      }
-    } catch (CoreException e) {
-    }
-  }
-
-  public void phpParse(String s, int rowCount) throws CoreException {
-    this.str = s;
-    if (s == null) {
-      if (phpList.size() != 0) {
-        this.str = ((PHPString) phpList.get(currentPHPString++)).getPHPString();
-      }
-    }
-    this.token = TT_EOF;
-    this.chIndx = 0;
-    this.rowCount = rowCount;
-    this.columnCount = 0;
-    this.phpEnd = false;
-    getNextToken();
-    do {
-      try {
-        if (token != TT_EOF && token != TT_UNDEFINED) {
-          statementList();
-        }
-        if (token != TT_EOF && token != TT_UNDEFINED) {
-          if (token == TT_ARGCLOSE) { 
-            throwSyntaxError("Too many closing ')'; end-of-file not reached.");
-          }
-          if (token == TT_LISTCLOSE) {
-            throwSyntaxError("Too many closing '}'; end-of-file not reached.");
-          }
-          if (token == TT_PARTCLOSE) {
-            throwSyntaxError("Too many closing ']'; end-of-file not reached.");
-          }
-
-          if (token == TT_ARGOPEN) {
-            throwSyntaxError("Read character '('; end-of-file not reached.");
-          }
-          if (token == TT_LISTOPEN) {
-            throwSyntaxError("Read character '{';  end-of-file not reached.");
-          }
-          if (token == TT_PARTOPEN) {
-            throwSyntaxError("Read character '[';  end-of-file not reached.");
-          }
-
-          throwSyntaxError("End-of-file not reached.");
-        }
-        return;
-      } catch (SyntaxError err) {
-        if (s != null) {
-          throw err;
-        } else {
-          setMarker(err.getMessage(), err.getLine(), ERROR);
-        }
-        // if an error occured, 
-        // try to find keywords 'class' or 'function'
-        // to parse the rest of the string
-        while (token != TT_EOF && token != TT_UNDEFINED) {
-          if (token == TT_class || token == TT_function) {
-            break;
-          }
-          getNextToken();
-        }
-        if (token == TT_EOF || token == TT_UNDEFINED) {
-          return;
-        }
-      }
-    }
-    while (true);
-  }
-
-  private void statementList() throws CoreException {
-    do {
-      statement();
-      if ((token == TT_LISTCLOSE)
-        || (token == TT_case)
-        || (token == TT_default)
-        || (token == TT_elseif)
-        || (token == TT_endif)
-        || (token == TT_endfor)
-        || (token == TT_endforeach)
-        || (token == TT_endwhile)
-        || (token == TT_endswitch)
-        || (token == TT_EOF)
-        || (token == TT_UNDEFINED)) {
-        return;
-      }
-    } while (true);
-  }
-
-  private void compoundStatement() throws CoreException {
-    // '{' [statement-list] '}'
-    if (token == TT_LISTOPEN) {
-      getNextToken();
-    } else {
-      throwSyntaxError("'{' expected in compound-statement.");
-    }
-    if (token != TT_LISTCLOSE) {
-      statementList();
-    }
-    if (token == TT_LISTCLOSE) {
-      getNextToken();
-    } else {
-      throwSyntaxError("'}' expected in compound-statement.");
-    }
-  }
-
-  private void statement() throws CoreException {
-    //   if (token > TT_KEYWORD && token != TT_list && token != TT_new) {
-    String keyword = identifier;
-    if (token == TT_include || token == TT_include_once) {
-      getNextToken();
-      expression();
-      if (token == TT_SEMICOLON) {
-        getNextToken();
-      } else {
-        if (!phpEnd) {
-          throwSyntaxError("';' character after 'include' or 'include_once' expected.");
-        }
-      }
-      return;
-    } else if (token == TT_require || token == TT_require_once) {
-      getNextToken();
-      //constant();
-      expression();
-      if (token == TT_SEMICOLON) {
-        getNextToken();
-      } else {
-        if (!phpEnd) {
-          throwSyntaxError("';' character after 'require' or 'require_once' expected.");
-        }
-      }
-      return;
-    } else if (token == TT_if) {
-      getNextToken();
-      if (token == TT_ARGOPEN) {
-        getNextToken();
-      } else {
-        throwSyntaxError("'(' expected after 'if' keyword.");
-      }
-      expression();
-      if (token == TT_ARGCLOSE) {
-        getNextToken();
-      } else {
-        throwSyntaxError("')' expected after 'if' condition.");
-      }
-      ifStatement();
-      return;
-
-    } else if (token == TT_switch) {
-      getNextToken();
-      if (token == TT_ARGOPEN) {
-        getNextToken();
-      } else {
-        throwSyntaxError("'(' expected after 'switch' keyword.");
-      }
-      expression();
-      if (token == TT_ARGCLOSE) {
-        getNextToken();
-      } else {
-        throwSyntaxError("')' expected after 'switch' condition.");
-      }
-      switchStatement();
-      return;
-    } else if (token == TT_for) {
-      getNextToken();
-      if (token == TT_ARGOPEN) {
-        getNextToken();
-      } else {
-        throwSyntaxError("'(' expected after 'for' keyword.");
-      }
-      if (token == TT_SEMICOLON) {
-        getNextToken();
-      } else {
-        expressionList();
-        if (token == TT_SEMICOLON) {
-          getNextToken();
-        } else {
-          throwSyntaxError("';' expected after 'for'.");
-        }
-      }
-      if (token == TT_SEMICOLON) {
-        getNextToken();
-      } else {
-        expressionList();
-        if (token == TT_SEMICOLON) {
-          getNextToken();
-        } else {
-          throwSyntaxError("';' expected after 'for'.");
-        }
-      }
-      if (token == TT_ARGCLOSE) {
-        getNextToken();
-      } else {
-        expressionList();
-        if (token == TT_ARGCLOSE) {
-          getNextToken();
-        } else {
-          throwSyntaxError("')' expected after 'for'.");
-        }
-      }
-      forStatement();
-      return;
-    } else if (token == TT_while) {
-      getNextToken();
-      if (token == TT_ARGOPEN) {
-        getNextToken();
-      } else {
-        throwSyntaxError("'(' expected after 'while' keyword.");
-      }
-      expression();
-      if (token == TT_ARGCLOSE) {
-        getNextToken();
-      } else {
-        throwSyntaxError("')' expected after 'while' condition.");
-      }
-      whileStatement();
-      return;
-    } else if (token == TT_do) {
-      getNextToken();
-      if (token == TT_LISTOPEN) {
-        getNextToken();
-      } else {
-        throwSyntaxError("'{' expected after 'do' keyword.");
-      }
-      if (token != TT_LISTCLOSE) {
-        statementList();
-      }
-      if (token == TT_LISTCLOSE) {
-        getNextToken();
-      } else {
-        throwSyntaxError("'}' expected after 'do' keyword.");
-      }
-      if (token == TT_while) {
-        getNextToken();
-        if (token == TT_ARGOPEN) {
-          getNextToken();
-        } else {
-          throwSyntaxError("'(' expected after 'while' keyword.");
-        }
-        expression();
-        if (token == TT_ARGCLOSE) {
-          getNextToken();
-        } else {
-          throwSyntaxError("')' expected after 'while' condition.");
-        }
-      } else {
-        throwSyntaxError("'while' expected after 'do' keyword.");
-      }
-      if (token == TT_SEMICOLON) {
-        getNextToken();
-      } else {
-        if (!phpEnd) {
-          throwSyntaxError("';' expected after do-while statement.");
-        }
-      }
-      return;
-    } else if (token == TT_foreach) {
-      getNextToken();
-      if (token == TT_ARGOPEN) {
-        getNextToken();
-      } else {
-        throwSyntaxError("'(' expected after 'foreach' keyword.");
-      }
-      expression();
-      if (token == TT_as) {
-        getNextToken();
-      } else {
-        throwSyntaxError("'as' expected after 'foreach' exxpression.");
-      }
-      variable();
-      if (token == TT_FOREACH) {
-        getNextToken();
-        variable();
-      }
-      if (token == TT_ARGCLOSE) {
-        getNextToken();
-      } else {
-        throwSyntaxError("')' expected after 'foreach' expression.");
-      }
-      foreachStatement();
-      return;
-
-    } else if (token == TT_continue || token == TT_break || token == TT_return) {
-      getNextToken();
-      if (token != TT_SEMICOLON) {
-        expression();
-      }
-      if (token == TT_SEMICOLON) {
-        getNextToken();
-      } else {
-        if (!phpEnd) {
-          throwSyntaxError("';' expected after 'continue', 'break' or 'return'.");
-        }
-      }
-      return;
-
-    } else if (token == TT_echo) {
-      getNextToken();
-      expressionList();
-      if (token == TT_SEMICOLON) {
-        getNextToken();
-      } else {
-        if (!phpEnd) {
-          throwSyntaxError("';' expected after 'echo' statement.");
-        }
-      }
-      return;
-      //    } else if (token == TT_print) {
-      //      getNextToken();
-      //      expression();
-      //      if (token == TT_SEMICOLON) {
-      //        getNextToken();
-      //      } else {
-      //        if (!phpEnd) {
-      //          throwSyntaxError("';' expected after 'print' statement.");
-      //        }
-      //      }
-      //      return;
-
-    } else if (token == TT_global || token == TT_static) {
-      getNextToken();
-      variableList();
-      if (token == TT_SEMICOLON) {
-        getNextToken();
-      } else {
-        if (!phpEnd) {
-          throwSyntaxError("';' expected after 'global' or 'static' statement.");
-        }
-      }
-      return;
-
-      //      } else if (token == TT_unset) {
-      //        getNextToken();
-      //        if (token == TT_ARGOPEN) {
-      //          getNextToken();
-      //        } else {
-      //          throwSyntaxError("'(' expected after 'unset' keyword.");
-      //        }
-      //        variableList();
-      //        if (token == TT_ARGCLOSE) {
-      //          getNextToken();
-      //        } else {
-      //          throwSyntaxError("')' expected after 'unset' statement.");
-      //        }
-      //        if (token == TT_SEMICOLON) {
-      //          getNextToken();
-      //        } else {
-      //          if (!phpEnd) {
-      //            throwSyntaxError("';' expected after 'unset' statement.");
-      //          }
-      //        }
-      //        return;
-
-      //      } else if (token == TT_exit || token == TT_die) {
-      //        getNextToken();
-      //        if (token != TT_SEMICOLON) {
-      //          exitStatus();
-      //        }
-      //        if (token == TT_SEMICOLON) {
-      //          getNextToken();
-      //        } else {
-      //          if (!phpEnd) {
-      //            throwSyntaxError("';' expected after 'exit' or 'die' statement.");
-      //          }
-      //        }
-      //        return;
-
-    } else if (token == TT_define) {
-      getNextToken();
-      if (token == TT_ARGOPEN) {
-        getNextToken();
-      } else {
-        throwSyntaxError("'(' expected after 'define' keyword.");
-      }
-      expression();
-      if (token == TT_COMMA) {
-        getNextToken();
-      } else {
-        throwSyntaxError("',' expected after first 'define' constant.");
-      }
-      expression();
-      if (token == TT_COMMA) {
-        getNextToken();
-        expression();
-      }
-      if (token == TT_ARGCLOSE) {
-        getNextToken();
-      } else {
-        throwSyntaxError("')' expected after 'define' statement.");
-      }
-      if (token == TT_SEMICOLON) {
-        getNextToken();
-      } else {
-        if (!phpEnd) {
-          throwSyntaxError("';' expected after 'define' statement.");
-        }
-      }
-      return;
-    } else if (token == TT_function) {
-      getNextToken();
-      functionDefinition();
-      return;
-    } else if (token == TT_class) {
-      getNextToken();
-      classDeclarator();
-      classBody();
-      return;
-      //      } else {
-      //        throwSyntaxError("Unexpected keyword '" + keyword + "'");
-    } else if (token == TT_LISTOPEN) {
-      // compoundStatement
-      getNextToken();
-      if (token != TT_LISTCLOSE) {
-        statementList();
-      }
-      if (token == TT_LISTCLOSE) {
-        getNextToken();
-        return;
-      } else {
-        throwSyntaxError("'}' expected.");
-      }
-    } else {
-      if (token != TT_SEMICOLON) {
-        expression();
-      }
-      if (token == TT_SEMICOLON) {
-        getNextToken();
-        return;
-      } else {
-        if (!phpEnd) {
-          throwSyntaxError("';' expected after expression.");
-        }
-      }
-    }
-  }
-
-  private void classDeclarator() throws CoreException {
-    //identifier
-    //identifier 'extends' identifier
-    if (token == TT_IDENTIFIER) {
-      getNextToken();
-      if (token == TT_extends) {
-        getNextToken();
-        if (token == TT_IDENTIFIER) {
-          getNextToken();
-        } else {
-          throwSyntaxError("Class name expected after keyword 'extends'.");
-        }
-      }
-    } else {
-      throwSyntaxError("Class name expected after keyword 'class'.");
-    }
-  }
-
-  private void classBody() throws CoreException {
-    //'{' [class-element-list] '}'
-    if (token == TT_LISTOPEN) {
-      getNextToken();
-      if (token != TT_LISTCLOSE) {
-        classElementList();
-      }
-      if (token == TT_LISTCLOSE) {
-        getNextToken();
-      } else {
-        throwSyntaxError("'}' expected at end of class body.");
-      }
-    } else {
-      throwSyntaxError("'{' expected at start of class body.");
-    }
-  }
-
-  private void classElementList() throws CoreException {
-    do {
-      classElement();
-    } while (token == TT_function || token == TT_var);
-  }
-
-  private void classElement() throws CoreException {
-    //class-property
-    //function-definition
-    if (token == TT_function) {
-      getNextToken();
-      functionDefinition();
-    } else if (token == TT_var) {
-      getNextToken();
-      classProperty();
-    } else {
-      throwSyntaxError("'function' or 'var' expected.");
-    }
-  }
-
-  private void classProperty() throws CoreException {
-    //'var' variable ';'
-    //'var' variable '=' constant ';'
-    do {
-      if (token == TT_VARIABLE) {
-        getNextToken();
-        if (token == TT_ASSIGN) {
-          getNextToken();
-          constant();
-        }
-      } else {
-        throwSyntaxError("Variable expected after keyword 'var'.");
-      }
-      if (token != TT_COMMA) {
-        break;
-      }
-      getNextToken();
-    } while (true);
-    if (token == TT_SEMICOLON) {
-      getNextToken();
-    } else {
-      throwSyntaxError("';' expected after variable declaration.");
-    }
-  }
-
-  private void functionDefinition() throws CoreException {
-    functionDeclarator();
-    compoundStatement();
-  }
-
-  private void functionDeclarator() throws CoreException {
-    //identifier '(' [parameter-list] ')'
-    if (token == TT_AMPERSAND) {
-      getNextToken();
-    }
-    if (token == TT_IDENTIFIER) {
-      getNextToken();
-      if (token == TT_ARGOPEN) {
-        getNextToken();
-      } else {
-        throwSyntaxError("'(' expected in function declaration.");
-      }
-      if (token != TT_ARGCLOSE) {
-        parameterList();
-      }
-      if (token != TT_ARGCLOSE) {
-        throwSyntaxError("')' expected in function declaration.");
-      } else {
-        getNextToken();
-      }
-    }
-  }
-  //
-  private void parameterList() throws CoreException {
-    //parameter-declaration
-    //parameter-list ',' parameter-declaration
-    do {
-      parameterDeclaration();
-      if (token != TT_COMMA) {
-        break;
-      }
-      getNextToken();
-    } while (true);
-  }
-
-  private void parameterDeclaration() throws CoreException {
-    //variable
-    //variable-reference
-    if (token == TT_AMPERSAND) {
-      getNextToken();
-      if (token == TT_VARIABLE) {
-        getNextToken();
-      } else {
-        throwSyntaxError("Variable expected after reference operator '&'.");
-      }
-    }
-    //variable '=' constant
-    if (token == TT_VARIABLE) {
-      getNextToken();
-      if (token == TT_ASSIGN) {
-        getNextToken();
-        constant();
-      }
-      return;
-    }
-  }
-
-  private void labeledStatementList() throws CoreException {
-    if (token != TT_case && token != TT_default) {
-      throwSyntaxError("'case' or 'default' expected.");
-    }
-    do {
-      if (token == TT_case) {
-        getNextToken();
-        constant();
-        if (token == TT_DDOT) {
-          getNextToken();
-          if (token == TT_case || token == TT_default) { // empty case statement ?
-            continue;
-          }
-          statementList();
-        } else if (token == TT_SEMICOLON) {
-          setMarker("':' expected after 'case' keyword found ';'.", rowCount, PHPParser.INFO);
-          getNextToken();
-          if (token == TT_case) { // empty case statement ?
-            continue;
-          }
-          statementList();
-        } else {
-          throwSyntaxError("':' character after 'case' constant expected.");
-        }
-      } else { // TT_default 
-        getNextToken();
-        if (token == TT_DDOT) {
-          getNextToken();
-          statementList();
-        } else {
-          throwSyntaxError("':' character after 'default' expected.");
-        }
-      }
-    } while (token == TT_case || token == TT_default);
-  }
-
-  //  public void labeledStatement() {
-  //    if (token == TT_case) {
-  //      getNextToken();
-  //      constant();
-  //      if (token == TT_DDOT) {
-  //        getNextToken();
-  //        statement();
-  //      } else {
-  //        throwSyntaxError("':' character after 'case' constant expected.");
-  //      }
-  //      return;
-  //    } else if (token == TT_default) {
-  //      getNextToken();
-  //      if (token == TT_DDOT) {
-  //        getNextToken();
-  //        statement();
-  //      } else {
-  //        throwSyntaxError("':' character after 'default' expected.");
-  //      }
-  //      return;
-  //    }
-  //  }
-
-  //  public void expressionStatement() {
-  //  }
-
-  //  private void inclusionStatement() {
-  //  }
-
-  //  public void compoundStatement() {
-  //  }
-
-  //  public void selectionStatement() {
-  //  }
-  //
-  //  public void iterationStatement() {
-  //  }
-  //
-  //  public void jumpStatement() {
-  //  }
-  //
-  //  public void outputStatement() {
-  //  }
-  //
-  //  public void scopeStatement() {
-  //  }
-  //
-  //  public void flowStatement() {
-  //  }
-  //
-  //  public void definitionStatement() {
-  //  }
-
-  private void ifStatement() throws CoreException {
-    // ':' statement-list [elseif-list] [else-colon-statement] 'endif' ';'
-    if (token == TT_DDOT) {
-      getNextToken();
-      statementList();
-      switch (token) {
-        case TT_else :
-          getNextToken();
-          if (token == TT_DDOT) {
-            getNextToken();
-            statementList();
-          } else {
-            if (token == TT_if) { //'else if'
-              getNextToken();
-              elseifStatementList();
-            } else {
-              throwSyntaxError("':' expected after 'else'.");
-            }
-          }
-          break;
-        case TT_elseif :
-          getNextToken();
-          elseifStatementList();
-          break;
-      }
-
-      if (token != TT_endif) {
-        throwSyntaxError("'endif' expected.");
-      }
-      getNextToken();
-      if (token != TT_SEMICOLON) {
-        throwSyntaxError("';' expected after if-statement.");
-      }
-      getNextToken();
-    } else {
-      // statement [else-statement]
-      statement();
-      if (token == TT_elseif) {
-        getNextToken();
-        if (token == TT_ARGOPEN) {
-          getNextToken();
-        } else {
-          throwSyntaxError("'(' expected after 'elseif' keyword.");
-        }
-        expression();
-        if (token == TT_ARGCLOSE) {
-          getNextToken();
-        } else {
-          throwSyntaxError("')' expected after 'elseif' condition.");
-        }
-        ifStatement();
-      } else if (token == TT_else) {
-        getNextToken();
-        statement();
-      }
-    }
-  }
-
-  private void elseifStatementList() throws CoreException {
-    do {
-      elseifStatement();
-      switch (token) {
-        case TT_else :
-          getNextToken();
-          if (token == TT_DDOT) {
-            getNextToken();
-            statementList();
-            return;
-          } else {
-            if (token == TT_if) { //'else if'
-              getNextToken();
-            } else {
-              throwSyntaxError("':' expected after 'else'.");
-            }
-          }
-          break;
-        case TT_elseif :
-          getNextToken();
-          break;
-        default :
-          return;
-      }
-    } while (true);
-  }
-
-  private void elseifStatement() throws CoreException {
-    if (token == TT_ARGOPEN) {
-      getNextToken();
-      expression();
-      if (token != TT_ARGOPEN) {
-        throwSyntaxError("')' expected in else-if-statement.");
-      }
-      getNextToken();
-      if (token != TT_DDOT) {
-        throwSyntaxError("':' expected in else-if-statement.");
-      }
-      getNextToken();
-      statementList();
-    }
-  }
-
-  private void switchStatement() throws CoreException {
-    if (token == TT_DDOT) {
-      // ':' [labeled-statement-list] 'endswitch' ';'
-      getNextToken();
-      labeledStatementList();
-      if (token != TT_endswitch) {
-        throwSyntaxError("'endswitch' expected.");
-      }
-      getNextToken();
-      if (token != TT_SEMICOLON) {
-        throwSyntaxError("';' expected after switch-statement.");
-      }
-      getNextToken();
-    } else {
-      // '{' [labeled-statement-list] '}'
-      if (token != TT_LISTOPEN) {
-        throwSyntaxError("'{' expected in switch statement.");
-      }
-      getNextToken();
-      if (token != TT_LISTCLOSE) {
-        labeledStatementList();
-      }
-      if (token != TT_LISTCLOSE) {
-        throwSyntaxError("'}' expected in switch statement.");
-      }
-      getNextToken();
-
-    }
-  }
-
-  private void forStatement() throws CoreException {
-    if (token == TT_DDOT) {
-      getNextToken();
-      statementList();
-      if (token != TT_endfor) {
-        throwSyntaxError("'endfor' expected.");
-      }
-      getNextToken();
-      if (token != TT_SEMICOLON) {
-        throwSyntaxError("';' expected after for-statement.");
-      }
-      getNextToken();
-    } else {
-      statement();
-    }
-  }
-
-  private void whileStatement() throws CoreException {
-    // ':' statement-list 'endwhile' ';'
-    if (token == TT_DDOT) {
-      getNextToken();
-      statementList();
-      if (token != TT_endwhile) {
-        throwSyntaxError("'endwhile' expected.");
-      }
-      getNextToken();
-      if (token != TT_SEMICOLON) {
-        throwSyntaxError("';' expected after while-statement.");
-      }
-      getNextToken();
-    } else {
-      statement();
-    }
-  }
-
-  private void foreachStatement() throws CoreException {
-    if (token == TT_DDOT) {
-      getNextToken();
-      statementList();
-      if (token != TT_endforeach) {
-        throwSyntaxError("'endforeach' expected.");
-      }
-      getNextToken();
-      if (token != TT_SEMICOLON) {
-        throwSyntaxError("';' expected after foreach-statement.");
-      }
-      getNextToken();
-    } else {
-      statement();
-    }
-  }
-
-  private void exitStatus() throws CoreException {
-    if (token == TT_ARGOPEN) {
-      getNextToken();
-    } else {
-      throwSyntaxError("'(' expected in 'exit-status'.");
-    }
-    if (token != TT_ARGCLOSE) {
-      expression();
-    }
-    if (token == TT_ARGCLOSE) {
-      getNextToken();
-    } else {
-      throwSyntaxError("')' expected after 'exit-status'.");
-    }
-  }
-
-  private void expressionList() throws CoreException {
-    do {
-      expression();
-      if (token == TT_COMMA) {
-        getNextToken();
-      } else {
-        break;
-      }
-    } while (true);
-  }
-
-  private void expression() throws CoreException {
-    //    if (token == TT_STRING_CONSTANT || token == TT_INTERPOLATED_STRING) {
-    //      getNextToken();
-    //    } else {
-    logicalinclusiveorExpression();
-    //      while (token != TT_SEMICOLON) {
-    //        getNextToken();
-    //      //      }
-    //    }
-  }
-
-  private void postfixExpression() throws CoreException {
-    String ident;
-    boolean castFlag = false;
-    switch (token) {
-      case TT_new :
-        getNextToken();
-        expression();
-        break;
-      case TT_null :
-        getNextToken();
-        break;
-      case TT_false :
-        getNextToken();
-        break;
-      case TT_true :
-        getNextToken();
-        break;
-      case TT_STRING_CONSTANT :
-        getNextToken();
-        break;
-      case TT_INTERPOLATED_STRING :
-        getNextToken();
-        break;
-      case TT_ARGOPEN :
-        getNextToken();
-        if (token == TT_IDENTIFIER) {
-          // check if identifier is a type:
-          ident = identifier;
-          String str = identifier.toLowerCase();
-          for (int i = 0; i < PHP_TYPES.length; i++) {
-            if (PHP_TYPES[i].equals(str)) {
-              castFlag = true;
-              break;
-            }
-          }
-          if (castFlag) {
-            getNextToken();
-            if (token != TT_ARGCLOSE) {
-              throwSyntaxError(") expected after cast-type '" + ident + "'.");
-            }
-            getNextToken();
-            expression();
-            break;
-          }
-        }
-        if (!castFlag) {
-          expression();
-        }
-        if (token != TT_ARGCLOSE) {
-          throwSyntaxError(") expected in postfix-expression.");
-        }
-        getNextToken();
-        break;
-      case TT_DOUBLE_NUMBER :
-        getNextToken();
-        break;
-      case TT_INT_NUMBER :
-        getNextToken();
-        break;
-      case TT_DOLLAROPEN :
-        getNextToken();
-        expression();
-        if (token != TT_LISTCLOSE) {
-          throwSyntaxError("'}' expected after indirect variable token '${'.");
-        }
-        getNextToken();
-        break;
-      case TT_VARIABLE :
-        ident = identifier;
-        getNextToken();
-        if (token == TT_LISTOPEN) {
-          getNextToken();
-          expression();
-          if (token != TT_LISTCLOSE) {
-            throwSyntaxError("'}' expected after variable '" + ident + "' in variable-expression.");
-          }
-          getNextToken();
-        } else if (token == TT_ARGOPEN) {
-          getNextToken();
-          if (token != TT_ARGCLOSE) {
-            expressionList();
-            if (token != TT_ARGCLOSE) {
-              throwSyntaxError("')' expected after variable '" + ident + "' in postfix-expression.");
-            }
-          }
-          getNextToken();
-        }
-        break;
-      case TT_IDENTIFIER :
-        ident = identifier;
-        getNextToken();
-        if (token == TT_ARGOPEN) {
-          getNextToken();
-          if (token != TT_ARGCLOSE) {
-            expressionList();
-            if (token != TT_ARGCLOSE) {
-              throwSyntaxError("')' expected after identifier '" + ident + "' in postfix-expression.");
-            }
-          }
-          getNextToken();
-        }
-        break;
-      case TT_print :
-        getNextToken();
-        expression();
-        //        if (token == TT_SEMICOLON) {
-        //          getNextToken();
-        //        } else {
-        //          if (!phpEnd) {
-        //            throwSyntaxError("';' expected after 'print' statement.");
-        //          }
-        //        }
-        break;
-      case TT_list :
-        getNextToken();
-        if (token == TT_ARGOPEN) {
-          getNextToken();
-          if (token == TT_COMMA) {
-            getNextToken();
-          }
-          expressionList();
-          if (token != TT_ARGCLOSE) {
-            throwSyntaxError("')' expected after 'list' keyword.");
-          }
-          getNextToken();
-          //          if (token == TT_SET) {
-          //            getNextToken();
-          //            logicalinclusiveorExpression();
-          //          }
-        } else {
-          throwSyntaxError("'(' expected after 'list' keyword.");
-        }
-        break;
-        //      case TT_exit :
-        //        getNextToken();
-        //        if (token != TT_SEMICOLON) {
-        //          exitStatus();
-        //        }
-        //        if (token == TT_SEMICOLON) {
-        //          getNextToken();
-        //        } else {
-        //          if (!phpEnd) {
-        //            throwSyntaxError("';' expected after 'exit' expression.");
-        //          }
-        //        }
-        //        break;
-        //      case TT_die :
-        //        getNextToken();
-        //        if (token != TT_SEMICOLON) {
-        //          exitStatus();
-        //        }
-        //        if (token == TT_SEMICOLON) {
-        //          getNextToken();
-        //        } else {
-        //          if (!phpEnd) {
-        //            throwSyntaxError("';' expected after 'die' expression.");
-        //          }
-        //        }
-        //        break;
-
-        //      case TT_array :
-        //        getNextToken();
-        //        if (token == TT_ARGOPEN) {
-        //          getNextToken();
-        //          if (token == TT_COMMA) {
-        //            getNextToken();
-        //          }
-        //          expressionList();
-        //          if (token != TT_ARGCLOSE) {
-        //            throwSyntaxError("')' expected after 'list' keyword.");
-        //          }
-        //          getNextToken();
-        //          if (token == TT_SET) {
-        //            getNextToken();
-        //            logicalinclusiveorExpression();
-        //          }
-        //        } else {
-        //          throwSyntaxError("'(' expected after 'list' keyword.");
-        //        }
-        //        break;
-    }
-    boolean while_flag = true;
-    do {
-      switch (token) {
-        case TT_PARTOPEN :
-          getNextToken();
-          expression();
-          if (token != TT_PARTCLOSE) {
-            throwSyntaxError("] expected in postfix-expression.");
-          }
-          getNextToken();
-          break;
-        case TT_DDOT2 : // ::
-        case TT_REF : // ->
-          getNextToken();
-          if (token > TT_KEYWORD) {
-            ident = identifier;
-            setMarker("Avoid using keyword '" + ident + "' as variable name.", rowCount, PHPParser.INFO);
-            getNextToken();
-            if (token == TT_ARGOPEN) {
-              getNextToken();
-              expressionList();
-              if (token != TT_ARGCLOSE) {
-                throwSyntaxError(") expected after identifier '" + ident + "'.");
-              }
-              getNextToken();
-            }
-            break;
-          } else {
-            switch (token) {
-              case TT_VARIABLE :
-                ident = identifier;
-                getNextToken();
-                //              if (token == TT_ARGOPEN) {
-                //                getNextToken();
-                //                expressionList();
-                //                if (token != TT_ARGCLOSE) {
-                //                  throwSyntaxError(") expected after variable '" + ident + "'.");
-                //                }
-                //                getNextToken();
-                //              }
-                break;
-              case TT_IDENTIFIER :
-                ident = identifier;
-                getNextToken();
-                if (token == TT_ARGOPEN) {
-                  getNextToken();
-                  expressionList();
-                  if (token != TT_ARGCLOSE) {
-                    throwSyntaxError(") expected after identifier '" + ident + "'.");
-                  }
-                  getNextToken();
-                }
-                break;
-              case TT_LISTOPEN :
-                getNextToken();
-                expression();
-                if (token != TT_LISTCLOSE) {
-                  throwSyntaxError("} expected in postfix-expression.");
-                }
-                getNextToken();
-                break;
-              default :
-                throwSyntaxError("Syntax error after '->' token.");
-            }
-          }
-          break;
-        case TT_INCREMENT :
-          getNextToken();
-          break;
-        case TT_DECREMENT :
-          getNextToken();
-          break;
-        default :
-          while_flag = false;
-      }
-
-    } while (while_flag);
-  }
-
-  private void unaryExpression() throws CoreException {
-    switch (token) {
-      case TT_INCREMENT :
-        getNextToken();
-        unaryExpression();
-        break;
-      case TT_DECREMENT :
-        getNextToken();
-        unaryExpression();
-        break;
-        // '@' '&' '*' '+' '-' '~' '!' 
-      case TT_AT :
-        getNextToken();
-        castExpression();
-        break;
-      case TT_AMPERSAND :
-        getNextToken();
-        castExpression();
-        break;
-      case TT_MULTIPLY :
-        getNextToken();
-        castExpression();
-        break;
-      case TT_ADD :
-        getNextToken();
-        castExpression();
-        break;
-      case TT_SUBTRACT :
-        getNextToken();
-        castExpression();
-        break;
-      case TT_TILDE :
-        getNextToken();
-        castExpression();
-        break;
-      case TT_NOT :
-        getNextToken();
-        castExpression();
-        break;
-      default :
-        postfixExpression();
-    }
-  }
-
-  private void castExpression() throws CoreException {
-    //    if (token == TT_ARGOPEN) {
-    //      getNextToken();
-    //      typeName();
-    //      if (token != TT_ARGCLOSE) {
-    //        throwSyntaxError(") expected after cast-expression.");
-    //      }
-    //      getNextToken();
-    //    }
-    unaryExpression();
-  }
-
-  private void typeName() throws CoreException {
-    //'string' 'unset' 'array' 'object'
-    //'bool' 'boolean'
-    //'real' 'double' 'float'
-    //'int' 'integer'
-    String ident = "";
-    if (token == TT_IDENTIFIER) {
-      ident = identifier;
-      String str = identifier.toLowerCase();
-      getNextToken();
-      for (int i = 0; i < PHP_TYPES.length; i++) {
-        if (PHP_TYPES[i].equals(str)) {
-          return;
-        }
-      }
-    }
-    throwSyntaxError("Expected type cast '( <type-name> )'; Got '" + ident + "'.");
-  }
-
-  private void assignExpression() throws CoreException {
-    castExpression();
-    if (token == TT_ASSIGN) { // =
-      getNextToken();
-      logicalinclusiveorExpression();
-    } else if (token == TT_DOTASSIGN) { // .=
-      getNextToken();
-      logicalinclusiveorExpression();
-    } else if (token == TT_FOREACH) { // =>
-      getNextToken();
-      logicalinclusiveorExpression();
-    } else if (token == TT_ADDTO) { // +=
-      getNextToken();
-      logicalinclusiveorExpression();
-    } else if (token == TT_SUBTRACTFROM) { // -=
-      getNextToken();
-      logicalinclusiveorExpression();
-    } else if (token == TT_TIMESBY) { // *=
-      getNextToken();
-      logicalinclusiveorExpression();
-    } else if (token == TT_DIVIDEBY) { // *=
-      getNextToken();
-      logicalinclusiveorExpression();
-    } else if (token == TT_MODASSIGN) { // %=
-      getNextToken();
-      logicalinclusiveorExpression();
-    } else if (token == TT_ANDASSIGN) { // &=
-      getNextToken();
-      logicalinclusiveorExpression();
-    } else if (token == TT_POWASSIGN) { // ^=
-      getNextToken();
-      logicalinclusiveorExpression();
-    } else if (token == TT_LSHIFTASSIGN) { // <<=
-      getNextToken();
-      logicalinclusiveorExpression();
-    } else if (token == TT_RSHIFTASSIGN) { // >>=
-      getNextToken();
-      logicalinclusiveorExpression();
-    } else if (token == TT_TILDEASSIGN) { // ~=
-      getNextToken();
-      logicalinclusiveorExpression();
-    }
-  }
-
-  private void multiplicativeExpression() throws CoreException {
-    do {
-      assignExpression();
-      if (token != TT_MULTIPLY && token != TT_DIV && token != TT_MOD) {
-        return;
-      }
-      getNextToken();
-    } while (true);
-  }
-
-  private void concatenationExpression() throws CoreException {
-    do {
-      multiplicativeExpression();
-      if (token != TT_DOT) {
-        return;
-      }
-      getNextToken();
-    } while (true);
-  }
-
-  private void additiveExpression() throws CoreException {
-    do {
-      concatenationExpression();
-      if (token != TT_ADD && token != TT_SUBTRACT) {
-        return;
-      }
-      getNextToken();
-    } while (true);
-  }
-
-  private void shiftExpression() throws CoreException {
-    do {
-      additiveExpression();
-      if (token != TT_LSHIFT && token != TT_RSHIFT) {
-        return;
-      }
-      getNextToken();
-    } while (true);
-  }
-
-  private void relationalExpression() throws CoreException {
-    do {
-      shiftExpression();
-      if (token != TT_LESS && token != TT_GREATER && token != TT_LESSEQUAL && token != TT_GREATEREQUAL) {
-        return;
-      }
-      getNextToken();
-    } while (true);
-  }
-
-  private void identicalExpression() throws CoreException {
-    do {
-      relationalExpression();
-      if (token != TT_EX_EQUAL && token != TT_EX_UNEQUAL) {
-        return;
-      }
-      getNextToken();
-    } while (true);
-  }
-
-  private void equalityExpression() throws CoreException {
-    do {
-      identicalExpression();
-      if (token != TT_EQUAL && token != TT_UNEQUAL) {
-        return;
-      }
-      getNextToken();
-    } while (true);
-  }
-
-  private void ternaryExpression() throws CoreException {
-    equalityExpression();
-    if (token == TT_QUESTIONMARK) {
-      getNextToken();
-      expression();
-      if (token == TT_DDOT) {
-        getNextToken();
-        expression();
-      } else {
-        throwSyntaxError("':' expected in ternary operator '? :'.");
-      }
-    }
-  }
-
-  private void andExpression() throws CoreException {
-    do {
-      ternaryExpression();
-      if (token != TT_AMPERSAND) {
-        return;
-      }
-      getNextToken();
-    } while (true);
-  }
-
-  private void exclusiveorExpression() throws CoreException {
-    do {
-      andExpression();
-      if (token != TT_POW) {
-        return;
-      }
-      getNextToken();
-    } while (true);
-  }
-
-  private void inclusiveorExpression() throws CoreException {
-    do {
-      exclusiveorExpression();
-      if (token != TT_LINE) {
-        return;
-      }
-      getNextToken();
-    } while (true);
-  }
-
-  private void booleanandExpression() throws CoreException {
-    do {
-      inclusiveorExpression();
-      if (token != TT_AND) {
-        return;
-      }
-      getNextToken();
-    } while (true);
-  }
-
-  private void booleanorExpression() throws CoreException {
-    do {
-      booleanandExpression();
-      if (token != TT_OR) {
-        return;
-      }
-      getNextToken();
-    } while (true);
-  }
-
-  private void logicalandExpression() throws CoreException {
-    do {
-      booleanorExpression();
-      if (token != TT_and) {
-        return;
-      }
-      getNextToken();
-    } while (true);
-  }
-
-  private void logicalexclusiveorExpression() throws CoreException {
-    do {
-      logicalandExpression();
-      if (token != TT_xor) {
-        return;
-      }
-      getNextToken();
-    } while (true);
-  }
-
-  private void logicalinclusiveorExpression() throws CoreException {
-    do {
-      logicalexclusiveorExpression();
-      if (token != TT_or) {
-        return;
-      }
-      getNextToken();
-    } while (true);
-  }
-
-  //  public void assignmentExpression() {
-  //    if (token == TT_VARIABLE) {
-  //      getNextToken();
-  //      if (token == TT_SET) {
-  //        getNextToken();
-  //        logicalinclusiveorExpression();
-  //      }
-  //    } else {
-  //      logicalinclusiveorExpression();
-  //    }
-  //  }
-
-  private void variableList() throws CoreException {
-    do {
-      variable();
-      if (token == TT_COMMA) {
-        getNextToken();
-      } else {
-        break;
-      }
-    } while (true);
-  }
-
-  private void variable() throws CoreException {
-    if (token == TT_DOLLAROPEN) {
-      getNextToken();
-      expression();
-      ;
-      if (token != TT_LISTCLOSE) {
-        throwSyntaxError("'}' expected after indirect variable token '${'.");
-      }
-      getNextToken();
-    } else {
-      if (token == TT_VARIABLE) {
-        getNextToken();
-        if (token == TT_PARTOPEN) {
-          getNextToken();
-          expression();
-          if (token != TT_PARTCLOSE) {
-            throwSyntaxError("']' expected in variable-list.");
-          }
-          getNextToken();
-        } else if (token == TT_ASSIGN) {
-          getNextToken();
-          constant();
-        }
-      } else {
-        throwSyntaxError("$-variable expected in variable-list.");
-      }
-    }
-  }
-
-  private void constant() throws CoreException {
-    String ident;
-    switch (token) {
-      case TT_ADD :
-        getNextToken();
-        switch (token) {
-          case TT_DOUBLE_NUMBER :
-            getNextToken();
-            break;
-          case TT_INT_NUMBER :
-            getNextToken();
-            break;
-          default :
-            throwSyntaxError("Constant expected after '+' presign.");
-        }
-        break;
-      case TT_SUBTRACT :
-        getNextToken();
-        switch (token) {
-          case TT_DOUBLE_NUMBER :
-            getNextToken();
-            break;
-          case TT_INT_NUMBER :
-            getNextToken();
-            break;
-          default :
-            throwSyntaxError("Constant expected after '-' presign.");
-        }
-        break;
-      case TT_null :
-        getNextToken();
-        break;
-      case TT_false :
-        getNextToken();
-        break;
-      case TT_true :
-        getNextToken();
-        break;
-      case TT_IDENTIFIER :
-        ident = identifier;
-        getNextToken();
-        if (token == TT_ARGOPEN) {
-          getNextToken();
-          if (token != TT_ARGCLOSE) {
-            expressionList();
-            if (token != TT_ARGCLOSE) {
-              throwSyntaxError("')' expected after identifier '" + ident + "' in postfix-expression.");
-            }
-          }
-          getNextToken();
-        }
-        break;
-      case TT_STRING_CONSTANT :
-        getNextToken();
-        break;
-      case TT_INTERPOLATED_STRING :
-        getNextToken();
-        break;
-      case TT_DOUBLE_NUMBER :
-        getNextToken();
-        break;
-      case TT_INT_NUMBER :
-        getNextToken();
-        break;
-      default :
-        throwSyntaxError("Constant expected.");
-    }
-  }
-
-  /**
-   * Call the php parse command ( php -l -f &lt;filename&gt; )
-   * and create markers according to the external parser output
-   */
-  public static void phpExternalParse(IFile file) {
-    //IFile file = (IFile) resource;
-    IPath path = file.getFullPath();
-    IPreferenceStore store = PHPeclipsePlugin.getDefault().getPreferenceStore();
-    String filename = file.getLocation().toString();
-
-    String[] arguments = { filename };
-    MessageFormat form = new MessageFormat(store.getString(PHPeclipsePlugin.EXTERNAL_PARSER_PREF));
-    String command = form.format(arguments);
-
-    String parserResult = PHPStartApacheAction.execute(command, "External parser: ");
-
-    try {
-      // parse the buffer to find the errors and warnings
-      createMarkers(parserResult, file);
-    } catch (CoreException e) {
-    }
-  }
-
-  /**
-   * Create markers according to the external parser output
-   */
-  private static void createMarkers(String output, IFile file) throws CoreException {
-    // delete all markers
-    file.deleteMarkers(IMarker.PROBLEM, false, 0);
-
-    int indx = 0;
-    int brIndx = 0;
-    boolean flag = true;
-    while ((brIndx = output.indexOf("<br />", indx)) != -1) {
-      // newer php error output (tested with 4.2.3)
-      scanLine(output, file, indx, brIndx);
-      indx = brIndx + 6;
-      flag = false;
-    }
-    if (flag) {
-      while ((brIndx = output.indexOf("<br>", indx)) != -1) {
-        // older php error output (tested with 4.2.3)
-        scanLine(output, file, indx, brIndx);
-        indx = brIndx + 4;
-      }
-    }
-  }
-
-  private static void scanLine(String output, IFile file, int indx, int brIndx) throws CoreException {
-    String current;
-    String outLineNumberString;
-    StringBuffer lineNumberBuffer = new StringBuffer(10);
-    char ch;
-    current = output.substring(indx, brIndx);
-
-    if (current.indexOf(PARSE_WARNING_STRING) != -1 || current.indexOf(PARSE_ERROR_STRING) != -1) {
-      int onLine = current.indexOf("on line <b>");
-      if (onLine != -1) {
-        lineNumberBuffer.delete(0, lineNumberBuffer.length());
-        for (int i = onLine; i < current.length(); i++) {
-          ch = current.charAt(i);
-          if ('0' <= ch && '9' >= ch) {
-            lineNumberBuffer.append(ch);
-          }
-        }
-
-        int lineNumber = Integer.parseInt(lineNumberBuffer.toString());
-
-        Hashtable attributes = new Hashtable();
-
-        current = current.replaceAll("\n", "");
-        current = current.replaceAll("<b>", "");
-        current = current.replaceAll("</b>", "");
-        MarkerUtilities.setMessage(attributes, current);
-
-        if (current.indexOf(PARSE_ERROR_STRING) != -1)
-          attributes.put(IMarker.SEVERITY, new Integer(IMarker.SEVERITY_ERROR));
-        else if (current.indexOf(PARSE_WARNING_STRING) != -1)
-          attributes.put(IMarker.SEVERITY, new Integer(IMarker.SEVERITY_WARNING));
-        else
-          attributes.put(IMarker.SEVERITY, new Integer(IMarker.SEVERITY_INFO));
-        MarkerUtilities.setLineNumber(attributes, lineNumber);
-        MarkerUtilities.createMarker(file, attributes, IMarker.PROBLEM);
-      }
-    }
-  }
-}
\ No newline at end of file
index bf89097..e73e00d 100644 (file)
@@ -13,12 +13,15 @@ package net.sourceforge.phpeclipse.phpeditor.php;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Vector;
 
 import net.sourceforge.phpeclipse.IPreferenceConstants;
 import net.sourceforge.phpeclipse.PHPeclipsePlugin;
+import net.sourceforge.phpeclipse.phpeditor.PHPSyntaxRdr;
 import net.sourceforge.phpeclipse.phpeditor.util.PHPColorProvider;
 import net.sourceforge.phpeclipse.phpeditor.util.PHPWhitespaceDetector;
 import net.sourceforge.phpeclipse.phpeditor.util.PHPWordDetector;
+
 import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.jface.preference.PreferenceConverter;
 import org.eclipse.jface.text.TextAttribute;
@@ -71,7 +74,7 @@ public class PHPCodeScanner extends RuleBasedScanner implements IPreferenceConst
           do {
             fBuffer.append((char) c);
             c = scanner.read();
-          } while (c != scanner.EOF && fDetector.isWordPart((char) c));
+          } while (c != ICharacterScanner.EOF && fDetector.isWordPart((char) c));
           scanner.unread();
 
           if (isVariable) {
@@ -106,7 +109,7 @@ public class PHPCodeScanner extends RuleBasedScanner implements IPreferenceConst
    * Creates a PHP code scanner
    */
   public PHPCodeScanner(PHPColorProvider provider) {
-        final IPreferenceStore store = PHPeclipsePlugin.getDefault().getPreferenceStore();
+    final IPreferenceStore store = PHPeclipsePlugin.getDefault().getPreferenceStore();
 
     variable = new Token(new TextAttribute(provider.getColor(PreferenceConverter.getColor(store, PHP_VARIABLE))));
     keyword = new Token(new TextAttribute(provider.getColor(PreferenceConverter.getColor(store, PHP_KEYWORD))));
@@ -116,7 +119,6 @@ public class PHPCodeScanner extends RuleBasedScanner implements IPreferenceConst
     multi_comment = new Token(new TextAttribute(provider.getColor(PreferenceConverter.getColor(store, PHP_MULTILINE_COMMENT))));
     other = new Token(new TextAttribute(provider.getColor(PreferenceConverter.getColor(store, PHP_DEFAULT))));
 
-
     List rules = new ArrayList();
 
     // Add rule for single line comments.
@@ -135,10 +137,33 @@ public class PHPCodeScanner extends RuleBasedScanner implements IPreferenceConst
 
     // Add word rule for keywords, types, and constants.
     PHPWordRule wordRule = new PHPWordRule(new PHPWordDetector(), other);
+    //choochter-->
     for (int i = 0; i < PHPKeywords.PHP_KEYWORS.length; i++)
       wordRule.addWord(PHPKeywords.PHP_KEYWORS[i], keyword);
-    for (int i = 0; i < PHPFunctionNames.FUNCTION_NAMES.length; i++)
-      wordRule.addWord(PHPFunctionNames.FUNCTION_NAMES[i], functionName);
+
+    /*Read in the keywords from the XML file*/
+    PHPSyntaxRdr syntaxRdr = new PHPSyntaxRdr();
+    syntaxRdr.readFromFile(
+      "C:\\eclipse\\workspace\\net.sourceforge.phpeclipse\\src\\net\\sourceforge\\phpeclipse\\phpeditor"
+        + java.io.File.separator
+        + "syntax.xml");
+    {
+      Vector Vbuffer = syntaxRdr.getKeywords();
+      String VString = null;
+      //Read keywords
+      while ((Vbuffer != null) && (!Vbuffer.isEmpty() && ((VString = (String) Vbuffer.remove(0)) != null))) {
+        wordRule.addWord(VString, keyword);
+      }
+      //Read functions  - to be tested
+      Vbuffer = syntaxRdr.getFunctions();
+      while ((Vbuffer != null) && (!Vbuffer.isEmpty() && ((VString = (String) Vbuffer.remove(0)) != null))) {
+        wordRule.addWord(VString, functionName);
+      }
+    }
+    
+    //for (int i = 0; i < PHPFunctionNames.FUNCTION_NAMES.length; i++)
+    //  wordRule.addWord(PHPFunctionNames.FUNCTION_NAMES[i], functionName);
+    //<--choochter
     for (int i = 0; i < fgConstants.length; i++)
       wordRule.addWord(fgConstants[i], functionName);
     rules.add(wordRule);
@@ -158,6 +183,6 @@ public class PHPCodeScanner extends RuleBasedScanner implements IPreferenceConst
     comment.setData(new TextAttribute(provider.getColor(PreferenceConverter.getColor(store, PHP_SINGLELINE_COMMENT))));
     multi_comment.setData(new TextAttribute(provider.getColor(PreferenceConverter.getColor(store, PHP_MULTILINE_COMMENT))));
     other.setData(new TextAttribute(provider.getColor(PreferenceConverter.getColor(store, PHP_DEFAULT))));
-    
+
   }
 }
index c7ad06a..159d8fc 100644 (file)
@@ -20,12 +20,15 @@ import net.sourceforge.phpdt.internal.corext.template.ContextType;
 import net.sourceforge.phpdt.internal.corext.template.ContextTypeRegistry;
 import net.sourceforge.phpdt.internal.ui.text.java.IJavaCompletionProposal;
 import net.sourceforge.phpdt.internal.ui.text.java.JavaCompletionProposalComparator;
+import net.sourceforge.phpdt.internal.ui.text.template.IdentifierEngine;
 import net.sourceforge.phpdt.internal.ui.text.template.TemplateEngine;
+import net.sourceforge.phpeclipse.PHPeclipsePlugin;
+import net.sourceforge.phpeclipse.phpeditor.PHPContentOutlinePage;
+import net.sourceforge.phpeclipse.phpeditor.PHPEditor;
 import org.eclipse.jface.text.BadLocationException;
 import org.eclipse.jface.text.IDocument;
 import org.eclipse.jface.text.ITextViewer;
 import org.eclipse.jface.text.TextPresentation;
-import org.eclipse.jface.text.contentassist.CompletionProposal;
 import org.eclipse.jface.text.contentassist.ContextInformation;
 import org.eclipse.jface.text.contentassist.ICompletionProposal;
 import org.eclipse.jface.text.contentassist.IContentAssistProcessor;
@@ -34,6 +37,8 @@ import org.eclipse.jface.text.contentassist.IContextInformationExtension;
 import org.eclipse.jface.text.contentassist.IContextInformationPresenter;
 import org.eclipse.jface.text.contentassist.IContextInformationValidator;
 import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.ui.IEditorPart;
 
 /**
  * Example PHP completion processor.
@@ -112,43 +117,125 @@ public class PHPCompletionProcessor implements IContentAssistProcessor {
     }
   };
 
+//  public final class VariablesCompletionProposal implements IJavaCompletionProposal {
+//    private String fDisplayString;
+//    private String fReplacementString;
+//    private int fReplacementOffset;
+//    private int fReplacementLength;
+//    private int fCursorPosition;
+//    private Image fImage;
+//    private IContextInformation fContextInformation;
+//    private String fAdditionalProposalInfo;
+//
+//    /**
+//     * Creates a new completion proposal based on the provided information.  The replacement string is
+//     * considered being the display string too. All remaining fields are set to <code>null</code>.
+//     *
+//     * @param replacementString the actual string to be inserted into the document
+//     * @param replacementOffset the offset of the text to be replaced
+//     * @param replacementLength the length of the text to be replaced
+//     * @param cursorPosition the position of the cursor following the insert relative to replacementOffset
+//     */
+//    public VariablesCompletionProposal(
+//      String replacementString,
+//      int replacementOffset,
+//      int replacementLength,
+//      int cursorPosition) {
+//      this(replacementString, replacementOffset, replacementLength, cursorPosition, null, null, null, null);
+//    }
+//
+//    /**
+//     * Creates a new completion proposal. All fields are initialized based on the provided information.
+//     *
+//     * @param replacementString the actual string to be inserted into the document
+//     * @param replacementOffset the offset of the text to be replaced
+//     * @param replacementLength the length of the text to be replaced
+//     * @param cursorPosition the position of the cursor following the insert relative to replacementOffset
+//     * @param image the image to display for this proposal
+//     * @param displayString the string to be displayed for the proposal
+//     * @param contentInformation the context information associated with this proposal
+//     * @param additionalProposalInfo the additional information associated with this proposal
+//     */
+//    public VariablesCompletionProposal(
+//      String replacementString,
+//      int replacementOffset,
+//      int replacementLength,
+//      int cursorPosition,
+//      Image image,
+//      String displayString,
+//      IContextInformation contextInformation,
+//      String additionalProposalInfo) {
+//      //      Assert.isNotNull(replacementString);
+//      //      Assert.isTrue(replacementOffset >= 0);
+//      //      Assert.isTrue(replacementLength >= 0);
+//      //      Assert.isTrue(cursorPosition >= 0);
+//
+//      fReplacementString = replacementString;
+//      fReplacementOffset = replacementOffset;
+//      fReplacementLength = replacementLength;
+//      fCursorPosition = cursorPosition;
+//      fImage = image;
+//      fDisplayString = displayString;
+//      fContextInformation = contextInformation;
+//      fAdditionalProposalInfo = additionalProposalInfo;
+//    }
+//
+//    /*
+//     * @see ICompletionProposal#apply
+//     */
+//    public void apply(IDocument document) {
+//      try {
+//        document.replace(fReplacementOffset, fReplacementLength, fReplacementString);
+//      } catch (BadLocationException x) {
+//        // ignore
+//      }
+//    }
+//
+//    /*
+//     * @see ICompletionProposal#getSelection
+//     */
+//    public Point getSelection(IDocument document) {
+//      return new Point(fReplacementOffset + fCursorPosition, 0);
+//    }
+//
+//    /*
+//     * @see ICompletionProposal#getContextInformation()
+//     */
+//    public IContextInformation getContextInformation() {
+//      return fContextInformation;
+//    }
+//
+//    /*
+//     * @see ICompletionProposal#getImage()
+//     */
+//    public Image getImage() {
+//      return fImage;
+//    }
+//
+//    /*
+//     * @see ICompletionProposal#getDisplayString()
+//     */
+//    public String getDisplayString() {
+//      if (fDisplayString != null)
+//        return fDisplayString;
+//      return fReplacementString;
+//    }
+//
+//    /*
+//     * @see ICompletionProposal#getAdditionalProposalInfo()
+//     */
+//    public String getAdditionalProposalInfo() {
+//      return fAdditionalProposalInfo;
+//    }
+//    /**
+//    * Returns the relevance of the proposal.
+//    */
+//    public int getRelevance() {
+//      return 0;
+//    }
+//  }
+
   protected final static String[] fgProposals = PHPFunctionNames.FUNCTION_NAMES;
-  //    {
-  //      "array",
-  //      "break",
-  //      "class",
-  //      "continue",
-  //      "do",
-  //      "echo",
-  //      "else",
-  //      "elseif",
-  //      "endfor",
-  //      "endif",
-  //      "for",
-  //      "if",
-  //      "while",
-  //      "endwhile",
-  //      "switch",
-  //      "case",
-  //      "endswitch",
-  //      "return",
-  //      "define",
-  //      "include",
-  //      "include_once",
-  //      "require",
-  //      "require_once",
-  //      "function",
-  //      "new",
-  //      "old_function",
-  //      "default",
-  //      "global",
-  //      "static",
-  //      "foreach",
-  //      "endforeach",
-  //      "extends",
-  //      "empty",
-  //      "isset",
-  //      "var" };
 
   protected IContextInformationValidator fValidator = new Validator();
   private TemplateEngine fTemplateEngine;
@@ -199,26 +286,21 @@ public class PHPCompletionProcessor implements IContentAssistProcessor {
 
   private ICompletionProposal[] internalComputeCompletionProposals(ITextViewer viewer, int offset, int contextOffset) {
     IDocument document = viewer.getDocument();
+    Object[] identifiers = null;
     if (offset > 0) {
-      try {
-        ICompletionProposal[] result;
-        char character = document.getChar(offset - 1);
-        if (character == '$') {
-          //viewer.  .getActivePage().getActiveEditor();
-          result = new ICompletionProposal[fgProposals.length];
-          for (int i = 0; i < fgProposals.length; i++) {
-            IContextInformation info = new ContextInformation(fgProposals[i], MessageFormat.format(PHPEditorMessages.getString("CompletionProcessor.Proposal.ContextInfo.pattern"), new Object[] { fgProposals[i] })); //$NON-NLS-1$
-            result[i] = new CompletionProposal(fgProposals[i], offset, 0, fgProposals[i].length(), null, fgProposals[i], info, MessageFormat.format(PHPEditorMessages.getString("CompletionProcessor.Proposal.hoverinfo.pattern"), new Object[] { fgProposals[i] })); //$NON-NLS-1$
-          }
-          return result;
-        }
-      } catch (BadLocationException e) {
-        return new ICompletionProposal[0];
+   
+      PHPEditor editor = null;
+      PHPContentOutlinePage outlinePage = null;
+
+      IEditorPart targetEditor = PHPeclipsePlugin.getActiveWorkbenchWindow().getActivePage().getActiveEditor();
+      if (targetEditor != null && (targetEditor instanceof PHPEditor)) {
+        editor = (PHPEditor) targetEditor;
+        outlinePage = editor.getfOutlinePage();
+        identifiers = outlinePage.getVariables();
       }
     }
-
     if (fTemplateEngine != null) {
-      IJavaCompletionProposal[] results;
+      ICompletionProposal[] results;
       //      try {
       fTemplateEngine.reset();
       fTemplateEngine.complete(viewer, offset); //, unit);
@@ -229,15 +311,33 @@ public class PHPCompletionProcessor implements IContentAssistProcessor {
 
       IJavaCompletionProposal[] templateResults = fTemplateEngine.getResults();
 
+      IJavaCompletionProposal[] identifierResults = new IJavaCompletionProposal[0];
+      if (identifiers != null) {
+        IdentifierEngine identifierEngine;
+        String proposal;
+        // int j = 0;
+        //        for (int i = templateResults.length; i < templateResults.length + variables.length; i++) {
+        //          proposal = (String) variables[j++];
+        //          IContextInformation info = new ContextInformation(proposal, MessageFormat.format(PHPEditorMessages.getString("CompletionProcessor.Proposal.ContextInfo.pattern"), new Object[] { proposal })); //$NON-NLS-1$
+        //          results[i] = new VariablesCompletionProposal(proposal, offset, 0, proposal.length(), null, proposal, info, MessageFormat.format(PHPEditorMessages.getString("CompletionProcessor.Proposal.hoverinfo.pattern"), new Object[] { proposal })); //$NON-NLS-1$
+        //        }
+
+        ContextType contextType = ContextTypeRegistry.getInstance().getContextType("php"); //$NON-NLS-1$
+        if (contextType != null) {
+          identifierEngine = new IdentifierEngine(contextType);
+          identifierEngine.complete(viewer, offset, identifiers);
+          identifierResults = identifierEngine.getResults();
+        }
+      }
+      
       // concatenate arrays
-      IJavaCompletionProposal[] total = new IJavaCompletionProposal[templateResults.length]; // +results.length ];
+      IJavaCompletionProposal[] total;
+      total = new IJavaCompletionProposal[templateResults.length + identifierResults.length];
       System.arraycopy(templateResults, 0, total, 0, templateResults.length);
-      //      System.arraycopy(results, 0, total, templateResults.length, results.length);
+      System.arraycopy(identifierResults, 0, total, templateResults.length, identifierResults.length);
       results = total;
-      //    }
 
       fNumberOfComputedResults = (results == null ? 0 : results.length);
-
       /*
        * Order here and not in result collector to make sure that the order
        * applies to all proposals and not just those of the compilation unit. 
@@ -329,7 +429,7 @@ public class PHPCompletionProcessor implements IContentAssistProcessor {
    * Method declared on IContentAssistProcessor
    */
   public char[] getCompletionProposalAutoActivationCharacters() {
-    return new char[] { '$' };
+    return null; // new char[] { '$' };
   }
 
   /* (non-Javadoc)
index 981cd7f..7e9ede4 100644 (file)
@@ -14,6 +14,7 @@ import java.text.MessageFormat;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Hashtable;
+import java.util.Stack;
 
 import net.sourceforge.phpeclipse.PHPeclipsePlugin;
 import net.sourceforge.phpeclipse.actions.PHPStartApacheAction;
@@ -171,22 +172,23 @@ public class PHPParser extends PHPKeywords {
   }
 
   public static void setMarker(IFile file, String message, int lineNumber, int errorLevel) throws CoreException {
-
-    Hashtable attributes = new Hashtable();
-    MarkerUtilities.setMessage(attributes, message);
-    switch (errorLevel) {
-      case ERROR :
-        attributes.put(IMarker.SEVERITY, new Integer(IMarker.SEVERITY_ERROR));
-        break;
-      case WARNING :
-        attributes.put(IMarker.SEVERITY, new Integer(IMarker.SEVERITY_WARNING));
-        break;
-      case INFO :
-        attributes.put(IMarker.SEVERITY, new Integer(IMarker.SEVERITY_INFO));
-        break;
+    if (file != null) {
+      Hashtable attributes = new Hashtable();
+      MarkerUtilities.setMessage(attributes, message);
+      switch (errorLevel) {
+        case ERROR :
+          attributes.put(IMarker.SEVERITY, new Integer(IMarker.SEVERITY_ERROR));
+          break;
+        case WARNING :
+          attributes.put(IMarker.SEVERITY, new Integer(IMarker.SEVERITY_WARNING));
+          break;
+        case INFO :
+          attributes.put(IMarker.SEVERITY, new Integer(IMarker.SEVERITY_INFO));
+          break;
+      }
+      MarkerUtilities.setLineNumber(attributes, lineNumber);
+      MarkerUtilities.createMarker(file, attributes, IMarker.PROBLEM);
     }
-    MarkerUtilities.setLineNumber(attributes, lineNumber);
-    MarkerUtilities.createMarker(file, attributes, IMarker.PROBLEM);
   }
 
   private void throwSyntaxError(String error) {
@@ -1691,7 +1693,7 @@ public class PHPParser extends PHPKeywords {
   }
 
   /**
-   * Parses a string with php tAGS
+   * Parses a string with php tags
    * i.e. '&lt;body&gt; &lt;?php phpinfo() ?&gt; &lt;/body&gt;'
    */
   public void parse(String s) throws CoreException {
@@ -1756,6 +1758,75 @@ public class PHPParser extends PHPKeywords {
     while (true);
   }
 
+  public PHPOutlineInfo parseInfo(Object parent, String s) {
+    PHPOutlineInfo outlineInfo = new PHPOutlineInfo(parent);
+    //    Stack stack = new Stack();
+    //    stack.push(outlineInfo.getDeclarations());
+
+    this.str = s;
+    this.token = TT_EOF;
+    this.chIndx = 0;
+    this.rowCount = 1;
+    this.columnCount = 0;
+    this.phpEnd = false;
+    this.phpMode = false;
+
+    try {
+      getNextToken();
+      parseDeclarations(outlineInfo, outlineInfo.getDeclarations(), false);
+    } catch (CoreException e) {
+    }
+    return outlineInfo;
+  }
+
+  private void parseDeclarations(PHPOutlineInfo outlineInfo, PHPClassDeclaration current, boolean goBack) {
+    //   PHPClassDeclaration current = (PHPClassDeclaration) stack.peek();
+    PHPClassDeclaration temp;
+    int counter = 0;
+
+    try {
+      while (token != TT_EOF && token != TT_UNDEFINED) {
+        if (token == TT_VARIABLE) {
+          outlineInfo.addVariable(identifier);
+          getNextToken();
+        } else if (token == TT_function) {
+          getNextToken();
+          if (token == TT_IDENTIFIER) {
+            outlineInfo.addVariable(identifier);
+            current.add(new PHPFunctionDeclaration(current, identifier, chIndx - identifier.length()));
+            getNextToken();
+          }
+        } else if (token == TT_class) {
+          getNextToken();
+          if (token == TT_IDENTIFIER) {
+            outlineInfo.addVariable(identifier);
+            temp = new PHPClassDeclaration(current, identifier, chIndx - identifier.length());
+            current.add(temp);
+            //        stack.push(temp);
+            getNextToken();
+            while (token != TT_LISTOPEN && token != TT_EOF && token != TT_UNDEFINED) {
+              getNextToken();
+            }
+            parseDeclarations(outlineInfo, temp, true);
+            //        stack.pop();
+          }
+        } else if (token == TT_LISTOPEN) {
+          getNextToken();
+          counter++;
+        } else if (token == TT_LISTCLOSE) {
+          getNextToken();
+          --counter;
+          if (counter == 0 && goBack) {
+            return;
+          }
+        } else {
+          getNextToken();
+        }
+      }
+    } catch (CoreException e) {
+    }
+  }
+
   private void statementList() throws CoreException {
     do {
       statement();
index 607d90d..8e65c5f 100644 (file)
@@ -32,7 +32,9 @@ public class PHPColorProvider {
        public static final RGB DEFAULT= new RGB(0, 0, 0);
   
   public static final RGB  LINKED_POSITION_COLOR= new RGB(0, 0, 0);
-
+  public static final RGB  LINE_NUMBER_COLOR= new RGB(0, 0, 0);
+  public static final RGB  BACKGROUND_COLOR= new RGB(255, 255, 255);
+  
        protected Map fColorTable= new HashMap(10);
 
        /**