GNU Classpath (0.20) | |
Frames | No Frames |
1: /* BasicHTML.java -- Provides HTML support to ComponentUI implementations 2: Copyright (C) 2006 Free Software Foundation, Inc. 3: 4: This file is part of GNU Classpath. 5: 6: GNU Classpath is free software; you can redistribute it and/or modify 7: it under the terms of the GNU General Public License as published by 8: the Free Software Foundation; either version 2, or (at your option) 9: any later version. 10: 11: GNU Classpath is distributed in the hope that it will be useful, but 12: WITHOUT ANY WARRANTY; without even the implied warranty of 13: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14: General Public License for more details. 15: 16: You should have received a copy of the GNU General Public License 17: along with GNU Classpath; see the file COPYING. If not, write to the 18: Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 19: 02110-1301 USA. 20: 21: Linking this library statically or dynamically with other modules is 22: making a combined work based on this library. Thus, the terms and 23: conditions of the GNU General Public License cover the whole 24: combination. 25: 26: As a special exception, the copyright holders of this library give you 27: permission to link this library with independent modules to produce an 28: executable, regardless of the license terms of these independent 29: modules, and to copy and distribute the resulting executable under 30: terms of your choice, provided that you also meet, for each linked 31: independent module, the terms and conditions of the license of that 32: module. An independent module is a module which is not derived from 33: or based on this library. If you modify this library, you may extend 34: this exception to your version of the library, but you are not 35: obligated to do so. If you do not wish to do so, delete this 36: exception statement from your version. */ 37: 38: 39: package javax.swing.plaf.basic; 40: 41: import java.io.IOException; 42: import java.io.StringReader; 43: 44: import javax.swing.JComponent; 45: import javax.swing.text.BadLocationException; 46: import javax.swing.text.Element; 47: import javax.swing.text.View; 48: import javax.swing.text.ViewFactory; 49: import javax.swing.text.html.HTMLDocument; 50: import javax.swing.text.html.HTMLEditorKit; 51: 52: /** 53: * Provides support for HTML rendering to {@link javax.swing.plaf.ComponentUI} 54: * implementations. 55: * 56: * @author Roman Kennke (kennke@aicas.com) 57: */ 58: public class BasicHTML 59: { 60: 61: /** 62: * The key that is used to store a HTML view in a JComponent's client 63: * properties. 64: */ 65: public static final String propertyKey = "html"; 66: 67: /** 68: * The key that is used to store the document base in a JComponent's client 69: * properties. The document base is used to resolve relative references 70: * in HTML. 71: */ 72: public static final String documentBaseKey = "html.base"; 73: 74: /** 75: * Creates a new instance of BasicHTML. This should not be necessary since 76: * all methods in this class are static. 77: */ 78: public BasicHTML() 79: { 80: // Nothing to do here. 81: } 82: 83: /** 84: * Creates a {@link View} instance that can be used by the component 85: * <code>c</code> to render the HTML string <code>html</code>. 86: * 87: * @param c the component that needs to render the HTML string 88: * @param html the HTML string to be rendered 89: * 90: * @return a view that can render the HTML string 91: */ 92: public static View createHTMLView(JComponent c, String html) 93: { 94: // TODO: This might be wrong. Lets see if it turns out good when 95: // the javax.swing.text.html package is in a good shape. 96: HTMLDocument doc = new HTMLDocument(); 97: HTMLEditorKit kit = new HTMLEditorKit(); 98: StringReader reader = new StringReader(html); 99: try 100: { 101: kit.read(reader, doc, 0); 102: } 103: catch (IOException ex) 104: { 105: AssertionError err = new AssertionError("unexpected IOException"); 106: err.initCause(ex); 107: throw err; 108: } 109: catch (BadLocationException ex) 110: { 111: AssertionError err = 112: new AssertionError("unexpected BadLocationException"); 113: err.initCause(ex); 114: throw err; 115: } 116: ViewFactory vf = kit.getViewFactory(); 117: Element root = doc.getDefaultRootElement(); 118: View view = vf.create(root); 119: return view; 120: } 121: 122: /** 123: * Returns <code>true</code> if <code>s</code> is HTML, <code>false</code> 124: * otherwise. 125: * 126: * @param s the string to test 127: * 128: * @return <code>true</code> if <code>s</code> is HTML, <code>false</code> 129: * otherwise 130: */ 131: public static boolean isHTMLString(String s) 132: { 133: // We consider a string to be HTML if it contains both the '<' and '>' 134: // character at least once. 135: return s.contains("<") && s.contains(">"); 136: } 137: 138: /** 139: * Stores a HTML renderer in <code>c</code>'s client property if 140: * <code>text</code> is HTML, otherwise it clears the corresponding client 141: * property. This is useful for {@link java.swing.plaf.ComponentUI} 142: * implementations that are shared between it's components. 143: * 144: * @param c the component to update the renderer for 145: * @param text the string to be rendered 146: */ 147: public static void updateRenderer(JComponent c, String text) 148: { 149: if (isHTMLString(text)) 150: c.putClientProperty(propertyKey, createHTMLView(c, text)); 151: else 152: c.putClientProperty(propertyKey, null); 153: } 154: }
GNU Classpath (0.20) |