// HTMLParser Library $Name: v1_6_20060319 $ - A java-based parser for HTML // http://sourceforge.org/projects/htmlparser // Copyright (C) 2005 Derrick Oswald // // Revision Control Information // // $Source: /cvsroot/htmlparser/htmlparser/src/org/htmlparser/parserapplications/filterbuilder/HtmlTreeCellRenderer.java,v $ // $Author: derrickoswald $ // $Date: 2005/04/12 11:27:42 $ // $Revision: 1.2 $ // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either // version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public // License along with this library; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // package org.htmlparser.parserapplications.filterbuilder; import java.awt.Component; import java.util.Vector; import javax.swing.JTree; import javax.swing.tree.DefaultTreeCellRenderer; import javax.swing.tree.TreeCellRenderer; import org.htmlparser.Attribute; import org.htmlparser.Node; import org.htmlparser.lexer.Cursor; import org.htmlparser.nodes.TagNode; import org.htmlparser.nodes.TextNode; import org.htmlparser.util.ParserException; import org.htmlparser.util.Translate; /** * Renderer for tree view of a NodeList. */ public class HtmlTreeCellRenderer extends DefaultTreeCellRenderer implements TreeCellRenderer { /** * Create a new tree cell renderer for Nodes. */ public HtmlTreeCellRenderer () { setLeafIcon (null); setClosedIcon (null); setOpenIcon (null); } /** * Render the tag as HTML. * This is different from the tag's normal toHtml() method in that it * doesn't process children or end tags, just the initial tag, and * it also wraps the tag in html a label would expect. * @see org.htmlparser.Node#toHtml() * @param tag The tag to convert to HTML. * @return A string suitable for rendering the tag. */ public String toHtml (TagNode tag) { int length; int size; Vector attributes; Attribute attribute; String s; boolean children; StringBuffer ret; length = 2; attributes = tag.getAttributesEx (); size = attributes.size (); for (int i = 0; i < size; i++) { attribute = (Attribute)attributes.elementAt (i); length += attribute.getLength (); } ret = new StringBuffer (length); ret.append ("<"); for (int i = 0; i < size; i++) { attribute = (Attribute)attributes.elementAt (i); attribute.toString (ret); } ret.append (">"); s = Translate.encode (ret.toString ()); children = null != tag.getChildren (); ret = new StringBuffer (s.length () + 13 + (children ? 16 : 0)); ret.append ("<html>"); if (children) ret.append ("<font color=\"blue\">"); ret.append (s); if (children) ret.append ("</font>"); ret.append ("</html>"); return (ret.toString ()); } /** * Express this string node as a printable string * This is suitable for display in a debugger or output to a printout. * Control characters are replaced by their equivalent escape * sequence and contents is truncated to 80 characters. * @param node The node to render. * @return A string representation of the string node. */ public String toText (TextNode node) { int startpos; int endpos; String s; char c; StringBuffer ret; startpos = node.getStartPosition (); endpos = node.getEndPosition (); ret = new StringBuffer (endpos - startpos + 20); s = node.toHtml (); for (int i = 0; i < s.length (); i++) { c = s.charAt (i); switch (c) { case '\t': ret.append ("\\t"); break; case '\n': ret.append ("\\n"); break; case '\r': ret.append ("\\r"); break; default: ret.append (c); } if (77 <= ret.length ()) { ret.append ("..."); break; } } return (ret.toString ()); } /** * Render the node for the tree cell. * @see TreeCellRenderer#getTreeCellRendererComponent(JTree, Object, boolean, boolean, boolean, int, boolean) * @param tree {@inheritDoc} * @param value {@inheritDoc} * @param selected {@inheritDoc} * @param expanded {@inheritDoc} * @param leaf {@inheritDoc} * @param row {@inheritDoc} * @param hasFocus {@inheritDoc} * @return {@inheritDoc} */ public Component getTreeCellRendererComponent (JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) { Node node; super.getTreeCellRendererComponent (tree, value, selected, expanded, leaf, row, hasFocus); node = (Node)value; if (node instanceof TagNode) setText (toHtml ((TagNode)node)); else if (node instanceof TextNode) setText (toText ((TextNode)node)); else setText (node.toHtml ()); return (this); } }