package tk.eclipse.plugin.htmleditor.tasktag; import jp.aonir.fuzzyxml.FuzzyXMLComment; import jp.aonir.fuzzyxml.FuzzyXMLDocument; import jp.aonir.fuzzyxml.FuzzyXMLElement; import jp.aonir.fuzzyxml.FuzzyXMLNode; import jp.aonir.fuzzyxml.FuzzyXMLParser; import jp.aonir.fuzzyxml.FuzzyXMLText; /** * {@link ITaskTagDetector} implementation for HTML / XML / JSP. * This detector supports following extensions: * * <ul> * <li>.html</li> * <li>.htm</li> * <li>.xml</li> * <li>.tld</li> * <li>.xsd</li> * <li>.jsp</li> * <li>.jspf</li> * <li>.jspx</li> * </ul> * * @author Naoki Takezoe */ public class HTMLTaskTagDetector extends AbstractTaskTagDetector { public HTMLTaskTagDetector(){ addSupportedExtension("html"); addSupportedExtension("htm"); addSupportedExtension("xml"); addSupportedExtension("tld"); addSupportedExtension("xsd"); addSupportedExtension("jsp"); addSupportedExtension("jspf"); addSupportedExtension("jspx"); } @Override public void doDetect() throws Exception { FuzzyXMLDocument doc = new FuzzyXMLParser(false).parse(this._contents); processElement(doc.getDocumentElement()); } private void processElement(FuzzyXMLElement element){ FuzzyXMLNode[] children = element.getChildren(); for(int i=0;i<children.length;i++){ if(children[i] instanceof FuzzyXMLElement){ processElement((FuzzyXMLElement)children[i]); } else if(children[i] instanceof FuzzyXMLComment){ // for HTML/XML comment detectTaskTag(((FuzzyXMLComment)children[i]).getValue(), children[i].getOffset()); } else if(children[i] instanceof FuzzyXMLText){ // for JSP comment String value = ((FuzzyXMLText)children[i]).getValue(); if(value.startsWith("<%--")){ if(value.endsWith("--%>")){ value = value.substring(0, value.length()-4); } detectTaskTag(value, children[i].getOffset()); } } // TODO Should support tags in Java comment } } }