package tk.eclipse.plugin.jseditor.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.RuleBasedScanner; import org.eclipse.jface.text.rules.SingleLineRule; 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.JavaWordDetector; /** * * @author Naoki Takezoe */ public class JavaScriptScanner extends RuleBasedScanner { public static final String KEYWORDS[] = { "abstract", "boolean", "break", "byte", "case", "catch", "char", "class", "const", "continue", "default", "do", "double", "else", "extends", "false", "final", "finally", "float", "for", "function", "goto", "if", "implements", "import", "in", "instanceof", "int", "interface", "long", "native", "new", "null", "package", "private", "protected", "prototype", "public", "return", "short", "static", "super", "switch", "synchronized", "this", "throw", "throws", "transient", "true", "try", "var", "void", "while", "with" }; public JavaScriptScanner(ColorProvider colorProvider){ List<IRule> rules = createRules(colorProvider); setRules(rules.toArray(new IRule[rules.size()])); } /** * Creates the list of <code>IRule</code>. * If you have to customize rules, override this method. * * @param colorProvider ColorProvider * @return the list of <code>IRule</code> */ protected List<IRule> createRules(ColorProvider colorProvider){ IToken normal = colorProvider.getToken(HTMLPlugin.PREF_COLOR_FG); IToken string = colorProvider.getToken(HTMLPlugin.PREF_COLOR_JSSTRING); IToken comment = colorProvider.getToken(HTMLPlugin.PREF_COLOR_JSCOMMENT); IToken keyword = colorProvider.getToken(HTMLPlugin.PREF_COLOR_JSKEYWORD); List<IRule> rules = new ArrayList<IRule>(); rules.add(new SingleLineRule("\"", "\"", string, '\\')); rules.add(new SingleLineRule("'", "'", string, '\\')); rules.add(new EndOfLineRule("//", comment)); WordRule wordRule = new WordRule(new JavaWordDetector(), normal); for(int i=0;i<KEYWORDS.length;i++){ wordRule.addWord(KEYWORDS[i], keyword); } rules.add(wordRule); return rules; } }