package org.erlide.ui.editors.erl.scanner;
import java.util.List;
import org.eclipse.jface.text.rules.IRule;
import org.eclipse.jface.text.rules.IWordDetector;
import org.eclipse.jface.text.rules.SingleLineRule;
import org.eclipse.jface.text.rules.Token;
import org.eclipse.jface.text.rules.WordRule;
import org.erlide.ui.prefs.TokenHighlight;
import org.erlide.ui.util.IColorManager;
import com.google.common.collect.Lists;
public class ErlCommentScanner extends ErlTokenScanner {
public ErlCommentScanner(final IColorManager colorManager) {
super(colorManager);
final Token defaultToken = ErlTokenScanner
.getToken(TokenHighlight.COMMENT.getName());
setDefaultReturnToken(defaultToken);
final Token edocTag = ErlTokenScanner.getToken(TokenHighlight.EDOC_TAG.getName());
final Token htmlTag = ErlTokenScanner.getToken(TokenHighlight.HTML_TAG.getName());
final List<IRule> rulesList = Lists.newArrayList();
rulesList.add(new WordRule(new EdocTagDetector(), edocTag));
rulesList.add(new SingleLineRule("<", ">", htmlTag));
final WordRule taskRule = new WordRule(new IWordDetector() {
@Override
public boolean isWordStart(final char c) {
return Character.isLetter(c);
}
@Override
public boolean isWordPart(final char c) {
return Character.isLetter(c);
}
}, defaultToken);
taskRule.addWord("TODO", edocTag);
taskRule.addWord("FIXME", edocTag);
taskRule.addWord("XXX", edocTag);
rulesList.add(taskRule);
final IRule[] rules = new IRule[rulesList.size()];
rulesList.toArray(rules);
setRules(rules);
}
private final class EdocTagDetector implements IWordDetector {
@Override
public boolean isWordStart(final char c) {
return c == '@';
}
@Override
public boolean isWordPart(final char c) {
return Character.isLowerCase(c);
}
}
}