package tk.eclipse.plugin.jspeditor.editors; import java.util.ArrayList; import jp.aonir.fuzzyxml.FuzzyXMLComment; import jp.aonir.fuzzyxml.FuzzyXMLDocType; import jp.aonir.fuzzyxml.FuzzyXMLElement; import jp.aonir.fuzzyxml.FuzzyXMLNode; import jp.aonir.fuzzyxml.FuzzyXMLText; import org.eclipse.swt.graphics.Image; import tk.eclipse.plugin.htmleditor.HTMLPlugin; import tk.eclipse.plugin.htmleditor.editors.HTMLOutlinePage; public class JSPOutlinePage extends HTMLOutlinePage { public JSPOutlinePage(JSPSourceEditor editor) { super(editor); } @Override protected Image getNodeImage(FuzzyXMLNode element){ if(element instanceof FuzzyXMLElement){ return super.getNodeImage(element); } else if(element instanceof FuzzyXMLText){ FuzzyXMLText t = (FuzzyXMLText)element; if(t.getValue().startsWith("<%--")){ return HTMLPlugin.getDefault().getImageRegistry().get(HTMLPlugin.ICON_COMMENT); } return HTMLPlugin.getDefault().getImageRegistry().get(HTMLPlugin.ICON_TAG); } return super.getNodeImage(element); } @Override protected String getNodeText(FuzzyXMLNode node){ if(node instanceof FuzzyXMLText){ String text = ((FuzzyXMLText)node).getValue(); if(text.startsWith("<%--")){ return "#comment"; } else if(text.startsWith("<%@")){ return "jsp:directive"; } else if(text.startsWith("<%=")){ return "jsp:expression"; } else if(text.startsWith("<%")){ return "jsp:scriptlet"; } } return super.getNodeText(node); } @Override protected Object[] getNodeChildren(FuzzyXMLElement element){ ArrayList<FuzzyXMLNode> children = new ArrayList<FuzzyXMLNode>(); FuzzyXMLNode[] nodes = element.getChildren(); for(int i=0;i<nodes.length;i++){ if(nodes[i] instanceof FuzzyXMLElement){ children.add(nodes[i]); } else if(nodes[i] instanceof FuzzyXMLText && ((FuzzyXMLText)nodes[i]).getValue().startsWith("<%")){ children.add(nodes[i]); } else if(nodes[i] instanceof FuzzyXMLDocType){ children.add(nodes[i]); } else if(nodes[i] instanceof FuzzyXMLComment){ children.add(nodes[i]); } } return children.toArray(new FuzzyXMLNode[children.size()]); } }