blob: 55dc569928077baae0b7d377b73de547708d5a36 [file] [log] [blame]
package org.eclipse.ui.examples.javaeditor.javadoc;
/*
* (c) Copyright IBM Corp. 2000, 2001.
* All Rights Reserved.
*/
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jface.text.TextAttribute;
import org.eclipse.jface.text.rules.IRule;
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;
import org.eclipse.jface.text.rules.WordRule;
import org.eclipse.ui.examples.javaeditor.util.JavaColorProvider;
import org.eclipse.ui.examples.javaeditor.util.JavaWhitespaceDetector;
/**
* A rule based JavaDoc scanner.
*/
public class JavaDocScanner extends RuleBasedScanner {
/**
* A key word detector.
*/
static class JavaDocWordDetector implements IWordDetector {
/* (non-Javadoc)
* Method declared on IWordDetector
*/
public boolean isWordStart(char c) {
return (c == '@');
}
/* (non-Javadoc)
* Method declared on IWordDetector
*/
public boolean isWordPart(char c) {
return Character.isLetter(c);
}
};
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$
/**
* Create a new java doc scanner.
*/
public JavaDocScanner(JavaColorProvider provider) {
super();
IToken keyword= new Token(new TextAttribute(provider.getColor(JavaColorProvider.JAVADOC_KEYWORD)));
IToken tag= new Token(new TextAttribute(provider.getColor(JavaColorProvider.JAVADOC_TAG)));
IToken link= new Token(new TextAttribute(provider.getColor(JavaColorProvider.JAVADOC_LINK)));
List list= new ArrayList();
// Add rule for tags.
list.add(new SingleLineRule("<", ">", tag)); //$NON-NLS-2$ //$NON-NLS-1$
// Add rule for links.
list.add(new SingleLineRule("{", "}", link)); //$NON-NLS-2$ //$NON-NLS-1$
// Add generic whitespace rule.
list.add(new WhitespaceRule(new JavaWhitespaceDetector()));
// Add word rule for keywords.
WordRule wordRule= new WordRule(new JavaDocWordDetector());
for (int i= 0; i < fgKeywords.length; i++)
wordRule.addWord(fgKeywords[i], keyword);
list.add(wordRule);
IRule[] result= new IRule[list.size()];
list.toArray(result);
setRules(result);
}
}