package tk.eclipse.plugin.jspeditor.editors; import java.util.ArrayList; import java.util.List; import org.eclipse.jface.text.rules.EndOfLineRule; 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.MultiLineRule; import org.eclipse.jface.text.rules.RuleBasedScanner; import org.eclipse.jface.text.rules.SingleLineRule; import org.eclipse.jface.text.rules.WhitespaceRule; import org.eclipse.jface.text.rules.WordRule; import tk.eclipse.plugin.htmleditor.ColorProvider; import tk.eclipse.plugin.htmleditor.HTMLPlugin; import tk.eclipse.plugin.htmleditor.editors.JavaWhitespaceDetector; import tk.eclipse.plugin.htmleditor.editors.JavaWordDetector; /** * @author Naoki Takezoe */ public class JSPScriptletScanner extends RuleBasedScanner { private static String[] KEYWORDS = { "abstract", "break", "case", "catch", "class", "const", "continue", "default", "do", "else", "extends", "final", "finally", "for", "goto", "if", "implements", "import", "instanceof", "interface", "native", "new", "package", "private", "protected", "public", "static", "super", "switch", "synchronized", "this", "throw", "throws", "transient", "try", "volatile", "while", "void", "boolean", "char", "byte", "short", "strictfp", "int", "long", "float", "double", "return", "true", "false" }; public JSPScriptletScanner(ColorProvider provider){ IToken normal = provider.getToken(HTMLPlugin.PREF_COLOR_FG); IToken comment = provider.getToken(HTMLPlugin.PREF_JSP_COMMENT); IToken string = provider.getToken(HTMLPlugin.PREF_JSP_STRING); IToken keyword = provider.getToken(HTMLPlugin.PREF_JSP_KEYWORD); IToken script = provider.getToken(HTMLPlugin.PREF_COLOR_SCRIPT); List<IRule> rules = new ArrayList<IRule>(); rules.add(new MultiLineRule("/*" , "*/" , comment)); rules.add(new EndOfLineRule("//", comment)); rules.add(new SingleLineRule("\"", "\"", string, '\\')); rules.add(new SingleLineRule("\'", "\'", string, '\\')); WordRule wordRule = new WordRule(new JavaWordDetector(), normal); for(int i=0;i<KEYWORDS.length;i++){ wordRule.addWord(KEYWORDS[i], keyword); } rules.add(wordRule); WordRule delimitor = new WordRule(new IWordDetector(){ public boolean isWordStart(char c){ if(c=='<' || c=='%'){ return true; } return false; } public boolean isWordPart(char c){ if(c=='<' || c=='%' || c=='=' || c=='>'){ return true; } return false; } }, normal); delimitor.addWord("<%=", script); delimitor.addWord("<%", script); delimitor.addWord("%>", script); rules.add(delimitor); rules.add(new WhitespaceRule(new JavaWhitespaceDetector())); setRules(rules.toArray(new IRule[rules.size()])); } }