PHP highlighting colors could now be managed by the new PreferencePage
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpdt / internal / ui / text / phpdoc / PHPDocCodeScanner.java
index 9b0ec7f..5820ca6 100644 (file)
@@ -14,18 +14,17 @@ package net.sourceforge.phpdt.internal.ui.text.phpdoc;
 import java.util.ArrayList;
 import java.util.List;
 
-import net.sourceforge.phpdt.internal.ui.text.JavaColorManager;
-import net.sourceforge.phpeclipse.phpeditor.util.PHPColorProvider;
+import net.sourceforge.phpdt.internal.ui.text.AbstractJavaScanner;
+import net.sourceforge.phpdt.ui.text.IColorManager;
+import net.sourceforge.phpdt.ui.text.IJavaColorConstants;
 import net.sourceforge.phpeclipse.phpeditor.util.PHPWhitespaceDetector;
 
 import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.jface.text.BadLocationException;
 import org.eclipse.jface.text.IDocument;
-import org.eclipse.jface.text.TextAttribute;
 import org.eclipse.jface.text.rules.ICharacterScanner;
 import org.eclipse.jface.text.rules.IToken;
 import org.eclipse.jface.text.rules.IWordDetector;
-import org.eclipse.jface.text.rules.RuleBasedScanner;
 import org.eclipse.jface.text.rules.SingleLineRule;
 import org.eclipse.jface.text.rules.Token;
 import org.eclipse.jface.text.rules.WhitespaceRule;
@@ -37,166 +36,158 @@ import org.eclipse.jface.text.rules.WordRule;
 /**
  * A rule based PHPDoc scanner.
  */
-public final class PHPDocCodeScanner extends RuleBasedScanner {
-               
-               
-       /**
-        * A key word detector.
-        */
-       static class PHPDocKeywordDetector implements IWordDetector {
-
-               /**
-                * @see IWordDetector#isWordStart
-                */
-               public boolean isWordStart(char c) {
-                       return (c == '@');
-               }
-
-               /**
-                * @see IWordDetector#isWordPart
-                */
-               public boolean isWordPart(char c) {
-                       return Character.isLetter(c);
-               }
-       };
+public final class PHPDocCodeScanner extends AbstractJavaScanner {
+               
+               
+  /**
+   * A key word detector.
+   */
+  static class JavaDocKeywordDetector implements IWordDetector {
+
+    /**
+     * @see IWordDetector#isWordStart
+     */
+    public boolean isWordStart(char c) {
+      return (c == '@');
+    }
+
+    /**
+     * @see IWordDetector#isWordPart
+     */
+    public boolean isWordPart(char c) {
+      return Character.isLetter(c);
+    }
+  };
        
        
-       /**
-        * Detector for HTML comment delimiters.
-        */
-       static class HTMLCommentDetector implements IWordDetector {
-
-               /**
-                * @see IWordDetector#isWordStart
-                */
-               public boolean isWordStart(char c) {
-                       return (c == '<' || c == '-');
-               }
-
-               /**
-                * @see IWordDetector#isWordPart
-                */
-               public boolean isWordPart(char c) {
-                       return (c == '-' || c == '!' || c == '>');
-               }
-       };
+  /**
+   * Detector for HTML comment delimiters.
+   */
+  static class HTMLCommentDetector implements IWordDetector {
+
+    /**
+     * @see IWordDetector#isWordStart
+     */
+    public boolean isWordStart(char c) {
+      return (c == '<' || c == '-');
+    }
+
+    /**
+     * @see IWordDetector#isWordPart
+     */
+    public boolean isWordPart(char c) {
+      return (c == '-' || c == '!' || c == '>');
+    }
+  };
        
-       class TagRule extends SingleLineRule {
-               
-               /*
-                * @see SingleLineRule
-                */
-               public TagRule(IToken token) {
-                       super("<", ">", token, (char) 0); //$NON-NLS-2$ //$NON-NLS-1$
-               }
-               
-               /*
-                * @see SingleLineRule 
-                */
-               public TagRule(IToken token, char escapeCharacter) {
-                       super("<", ">", token, escapeCharacter); //$NON-NLS-2$ //$NON-NLS-1$
-               }
-               
-               private IToken checkForWhitespace(ICharacterScanner scanner) {
+  class TagRule extends SingleLineRule {
+               
+    /*
+     * @see SingleLineRule
+     */
+    public TagRule(IToken token) {
+      super("<", ">", token, (char) 0); //$NON-NLS-2$ //$NON-NLS-1$
+    }
+               
+    /*
+     * @see SingleLineRule 
+     */
+    public TagRule(IToken token, char escapeCharacter) {
+      super("<", ">", token, escapeCharacter); //$NON-NLS-2$ //$NON-NLS-1$
+    }
+               
+    private IToken checkForWhitespace(ICharacterScanner scanner) {
                        
-                       try {
+      try {
                                
-                               char c= getDocument().getChar(getTokenOffset() + 1);
-                               if (!Character.isWhitespace(c)) 
-                                       return fToken;
+        char c= getDocument().getChar(getTokenOffset() + 1);
+        if (!Character.isWhitespace(c)) 
+          return fToken;
                                        
-                       } catch (BadLocationException x) {
-                       }
+      } catch (BadLocationException x) {
+      }
                        
-                       return Token.UNDEFINED;
-               }
+      return Token.UNDEFINED;
+    }
                                
-               /*
-                * @see PatternRule#evaluate(ICharacterScanner)
-                */
-               public IToken evaluate(ICharacterScanner scanner) {
-                       IToken result= super.evaluate(scanner);
-                       if (result == fToken)
-                               return checkForWhitespace(scanner);
-                       return result;
-               }
-       };
+    /*
+     * @see PatternRule#evaluate(ICharacterScanner)
+     */
+    public IToken evaluate(ICharacterScanner scanner) {
+      IToken result= super.evaluate(scanner);
+      if (result == fToken)
+        return checkForWhitespace(scanner);
+      return result;
+    }
+  };
        
        
-       private static String[] fgKeywords= {"@author", "@deprecated", "@exception", "@param", "@return", "@see", "@serial", "@serialData", "@serialField", "@since", "@throws", "@version"}; //$NON-NLS-12$ //$NON-NLS-11$ //$NON-NLS-10$ //$NON-NLS-7$ //$NON-NLS-9$ //$NON-NLS-8$ //$NON-NLS-6$ //$NON-NLS-5$ //$NON-NLS-4$ //$NON-NLS-3$ //$NON-NLS-2$ //$NON-NLS-1$
+  private static String[] fgKeywords= {"@author", "@deprecated", "@exception", "@param", "@return", "@see", "@serial", "@serialData", "@serialField", "@since", "@throws", "@version"}; //$NON-NLS-12$ //$NON-NLS-11$ //$NON-NLS-10$ //$NON-NLS-7$ //$NON-NLS-9$ //$NON-NLS-8$ //$NON-NLS-6$ //$NON-NLS-5$ //$NON-NLS-4$ //$NON-NLS-3$ //$NON-NLS-2$ //$NON-NLS-1$
        
-//     private static String[] fgTokenProperties= {
-//             IJavaColorConstants.JAVADOC_KEYWORD,
-//             IJavaColorConstants.JAVADOC_TAG,
-//             IJavaColorConstants.JAVADOC_LINK,
-//             IJavaColorConstants.JAVADOC_DEFAULT
-//     };                      
+  private static String[] fgTokenProperties= {
+    IJavaColorConstants.PHPDOC_KEYWORD,
+    IJavaColorConstants.PHPDOC_TAG,
+    IJavaColorConstants.PHPDOC_LINK,
+    IJavaColorConstants.PHPDOC_DEFAULT
+  };                   
        
        
-       public PHPDocCodeScanner(JavaColorManager provider, IPreferenceStore store) {
-       //      super(manager, store);
-       //      initialize();  
-      createRules(provider);
-       }
+  public PHPDocCodeScanner(IColorManager manager, IPreferenceStore store) {
+    super(manager, store);
+    initialize();
+  }
        
-       public IDocument getDocument() {
-               return fDocument;
-       }
+  public IDocument getDocument() {
+    return fDocument;
+  }
        
-       /*
-        * @see AbstractJavaScanner#getTokenProperties()
-        */
-//     protected String[] getTokenProperties() {
-//             return fgTokenProperties;
-//     }
+  /*
+   * @see AbstractJavaScanner#getTokenProperties()
+   */
+  protected String[] getTokenProperties() {
+    return fgTokenProperties;
+  }
 
-       /* create the rules for PHPDoc
-        */
-       protected List createRules(JavaColorManager provider) {
+  /*
+   * @see AbstractJavaScanner#createRules()
+   */
+  protected List createRules() {
                
-               List list= new ArrayList();
+    List list= new ArrayList();
                
+    // Add rule for tags.
+    Token token= getToken(IJavaColorConstants.PHPDOC_TAG);
+    list.add(new TagRule(token));
                
-//    IToken type = new Token(new TextAttribute(provider.getColor(PHPColorProvider.FUNCTION_NAME)));
-//    IToken string = new Token(new TextAttribute(provider.getColor(PHPColorProvider.STRING)));
-//    IToken comment = new Token(new TextAttribute(provider.getColor(PHPColorProvider.SINGLE_LINE_COMMENT)));
-//    IToken multi_comment = new Token(new TextAttribute(provider.getColor(PHPColorProvider.MULTI_LINE_COMMENT)));
-//    IToken other = new Token(new TextAttribute(provider.getColor(PHPColorProvider.DEFAULT)));
-    
-               // Add rule for tags.
-       //      Token token= getToken(IJavaColorConstants.JAVADOC_TAG);
-    Token token = new Token(new TextAttribute(provider.getColor(PHPColorProvider.PHPDOC_TAG)));
-               list.add(new TagRule(token));
                
+    // Add rule for HTML comments
+    WordRule wordRule= new WordRule(new HTMLCommentDetector(), token);
+    wordRule.addWord("<!--", token); //$NON-NLS-1$
+    wordRule.addWord("--!>", token); //$NON-NLS-1$
+    list.add(wordRule);
                
-               // Add rule for HTML comments
-               WordRule wordRule= new WordRule(new HTMLCommentDetector(), token);
-               wordRule.addWord("<!--", token); //$NON-NLS-1$
-               wordRule.addWord("--!>", token); //$NON-NLS-1$
-               list.add(wordRule);
                
+    // Add rule for links.
+    token= getToken(IJavaColorConstants.PHPDOC_LINK);
+    list.add(new SingleLineRule("{@link", "}", token)); //$NON-NLS-2$ //$NON-NLS-1$
                
-               // Add rule for links.
-               token= new Token(new TextAttribute(provider.getColor(PHPColorProvider.PHPDOC_LINK)));
-               list.add(new SingleLineRule("{@link", "}", token)); //$NON-NLS-2$ //$NON-NLS-1$
                
+    // Add generic whitespace rule.
+    list.add(new WhitespaceRule(new PHPWhitespaceDetector()));
                
-               // Add generic whitespace rule.
-               list.add(new WhitespaceRule(new PHPWhitespaceDetector()));
                
+    // Add word rule for keywords.
+    token= getToken(IJavaColorConstants.PHPDOC_DEFAULT);
+    wordRule= new WordRule(new JavaDocKeywordDetector(), token);
                
-               // Add word rule for keywords.
-               token= new Token(new TextAttribute(provider.getColor(PHPColorProvider.PHPDOC_DEFAULT)));
-               wordRule= new WordRule(new PHPDocKeywordDetector(), token);
+    token= getToken(IJavaColorConstants.PHPDOC_KEYWORD);
+    for (int i= 0; i < fgKeywords.length; i++)
+      wordRule.addWord(fgKeywords[i], token);
+    list.add(wordRule);
                
-               token= new Token(new TextAttribute(provider.getColor(PHPColorProvider.PHPDOC_KEYWORD)));
-               for (int i= 0; i < fgKeywords.length; i++)
-                       wordRule.addWord(fgKeywords[i], token);
-               list.add(wordRule);
-               
-               setDefaultReturnToken( new Token(new TextAttribute(provider.getColor(PHPColorProvider.PHPDOC_DEFAULT))) );
-               return list;
-       }
+    setDefaultReturnToken(getToken(IJavaColorConstants.PHPDOC_DEFAULT));
+    return list;
+  }
 }