package com.hundsun.ares.studio.ui.editor.text;
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.Token;
import org.eclipse.jface.text.rules.WhitespaceRule;
import org.eclipse.jface.text.rules.WordRule;
import org.eclipse.swt.SWT;
import com.hundsun.ares.studio.ui.ARESColorManager;
/**
* <p>CreatedDate: 2008-2-14</p>
* @author sundl
*/
public class MacroScanner extends RuleBasedScanner {
public static class TagWordDetector implements IWordDetector {
/* (non-Javadoc)
* @see org.eclipse.jface.text.rules.IWordDetector#isWordPart(char)
*/
public boolean isWordPart(char c) {
return c == '[' || c == ']' || Character.isJavaIdentifierPart(c);
//return Character.isJavaIdentifierPart(c);
}
/* (non-Javadoc)
* @see org.eclipse.jface.text.rules.IWordDetector#isWordStart(char)
*/
public boolean isWordStart(char c) {
return c == '[' || c == ']' || Character.isJavaIdentifierStart(c);
//return Character.isJavaIdentifierStart(c);
}
}
public static class StdWordDetector implements IWordDetector {
/* (non-Javadoc)
* @see org.eclipse.jface.text.rules.IWordDetector#isWordPart(char)
*/
public boolean isWordPart(char c) {
return (c >= 'a' && c <= 'z') || (c>= 'A' && c <= 'Z') || (c == '_') || (c >= '0' && c <= '9') ;
//return Character.isJavaIdentifierPart(c);
}
/* (non-Javadoc)
* @see org.eclipse.jface.text.rules.IWordDetector#isWordStart(char)
*/
public boolean isWordStart(char c) {
return c == '@';
//return Character.isJavaIdentifierStart(c);
}
}
public static final String[] tagKeywords = new String[] {
"from", "FROM",
"select", "SELECT",
"where", "WHERE"
};
public MacroScanner(ARESColorManager manager) {
IToken var = new Token(new TextAttribute( manager.getColor(ARESColorManager.STDFILED) , null, SWT.BOLD));
IToken keywords = new Token(new TextAttribute(manager.getColor(ARESColorManager.KEYWORD), null, SWT.BOLD));
IToken def = new Token(new TextAttribute(manager.getColor(ARESColorManager.STRING)));
List<IRule> rules = new ArrayList<IRule>();
rules.add(new WordRule(new StdWordDetector(), var));
rules.add(new WhitespaceRule(new ARESWhitespaceDetector()));
WordRule wordRule = new WordRule(new ARESWordDetector());
for(String s : tagKeywords) {
wordRule.addWord(s, keywords);
}
rules.add(wordRule);
IRule[] rs = new IRule[rules.size()];
setRules(rules.toArray(rs));
setDefaultReturnToken(def);
}
}