package tk.eclipse.plugin.jspeditor.editors; import java.util.ArrayList; import java.util.List; 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.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.HTMLWhitespaceDetector; /** * @author Naoki Takezoe */ public class JSPDirectiveScanner extends RuleBasedScanner { public JSPDirectiveScanner(ColorProvider provider){ IToken string = provider.getToken(HTMLPlugin.PREF_COLOR_STRING); IToken script = provider.getToken(HTMLPlugin.PREF_COLOR_SCRIPT); List<IRule> rules = new ArrayList<IRule>(); rules.add(new SingleLineRule("\"", "\"", string, '\\')); rules.add(new SingleLineRule("\'", "\'", string, '\\')); rules.add(new WhitespaceRule(new HTMLWhitespaceDetector())); WordRule delimitor = new WordRule(new IWordDetector(){ public boolean isWordStart(char c){ if(c=='<' || c=='%' || c=='@'){ return true; } return false; } public boolean isWordPart(char c){ if(c=='<' || c=='%' || c=='=' || c=='>' || c=='@'){ return true; } return false; } }); delimitor.addWord("<%@", script); delimitor.addWord("%>", script); rules.add(delimitor); setRules(rules.toArray(new IRule[rules.size()])); } }