001: /*
002: * $Id: HtmlEncoder.java,v 1.1 2003/10/02 13:27:23 oconnor_m Exp $
003: * $Name: JAG_v6_1 $
004: *
005: * Copyright 1999, 2000, 2001, 2002 by Bruno Lowagie.
006: *
007: * The contents of this file are subject to the Mozilla Public License Version 1.1
008: * (the "License"); you may not use this file except in compliance with the License.
009: * You may obtain a copy of the License at http://www.mozilla.org/MPL/
010: *
011: * Software distributed under the License is distributed on an "AS IS" basis,
012: * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
013: * for the specific language governing rights and limitations under the License.
014: *
015: * The Original Code is 'iText, a free JAVA-PDF library'.
016: *
017: * The Initial Developer of the Original Code is Bruno Lowagie. Portions created by
018: * the Initial Developer are Copyright (C) 1999, 2000, 2001, 2002 by Bruno Lowagie.
019: * All Rights Reserved.
020: * Co-Developer of the code is Paulo Soares. Portions created by the Co-Developer
021: * are Copyright (C) 2000, 2001, 2002 by Paulo Soares. All Rights Reserved.
022: *
023: * Contributor(s): all the names of the contributors are added in the source code
024: * where applicable.
025: *
026: * Alternatively, the contents of this file may be used under the terms of the
027: * LGPL license (the "GNU LIBRARY GENERAL PUBLIC LICENSE"), in which case the
028: * provisions of LGPL are applicable instead of those above. If you wish to
029: * allow use of your version of this file only under the terms of the LGPL
030: * License and not to allow others to use your version of this file under
031: * the MPL, indicate your decision by deleting the provisions above and
032: * replace them with the notice and other provisions required by the LGPL.
033: * If you do not delete the provisions above, a recipient may use your version
034: * of this file under either the MPL or the GNU LIBRARY GENERAL PUBLIC LICENSE.
035: *
036: * This library is free software; you can redistribute it and/or modify it
037: * under the terms of the MPL as stated above or under the terms of the GNU
038: * Library General Public License as published by the Free Software Foundation;
039: * either version 2 of the License, or any later version.
040: *
041: * This library is distributed in the hope that it will be useful, but WITHOUT
042: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
043: * FOR A PARTICULAR PURPOSE. See the GNU Library general Public License for more
044: * details.
045: *
046: * If you didn't download this code from the following link, you should check if
047: * you aren't using an obsolete version:
048: * http://www.lowagie.com/iText/
049: */
050: package com.lowagie.text.html;
051:
052: import java.awt.Color;
053:
054: /**
055: * This class converts a <CODE>String</CODE> to the HTML-format of a String.
056: * <P>
057: * To convert the <CODE>String</CODE>, each character is examined:
058: * <UL>
059: * <LI>ASCII-characters from 000 till 031 are represented as &#xxx;<BR>
060: * (with xxx = the value of the character)
061: * <LI>ASCII-characters from 032 t/m 127 are represented by the character itself, except for:
062: * <UL>
063: * <LI>'\n'becomes <BR>\n
064: * <LI>" becomes &quot;
065: * <LI>& becomes &amp;
066: * <LI>< becomes &lt;
067: * <LI>> becomes &gt;
068: * </UL>
069: * <LI>ASCII-characters from 128 till 255 are represented as &#xxx;<BR>
070: * (with xxx = the value of the character)
071: * </UL>
072: * <P>
073: * Example:
074: * <P><BLOCKQUOTE><PRE>
075: * String htmlPresentation = HtmlEncoder.encode("Marie-Thérèse Sørensen");
076: * </PRE></BLOCKQUOTE><P>
077: * for more info: see O'Reilly; "HTML: The Definitive Guide" (page 164)
078: *
079: * @author mario.maccarini@rug.ac.be
080: */
081: public class HtmlEncoder {
082:
083: // membervariables
084:
085: /** List with the HTML translation of all the characters. */
086: private static final String[] htmlCode = new String[256];
087:
088: static {
089: for (int i = 0; i < 10; i++) {
090: htmlCode[i] = "�" + i + ";";
091: }
092:
093: for (int i = 10; i < 32; i++) {
094: htmlCode[i] = "�" + i + ";";
095: }
096:
097: //make all spaces visible
098: htmlCode[32] = " ";
099:
100: for (int i = 33; i < 128; i++) {
101: htmlCode[i] = String.valueOf((char) i);
102: }
103:
104: // Special characters
105: htmlCode['\t'] = "\t";
106: htmlCode['\n'] = "<br />\n";
107: htmlCode['\"'] = """; // double quote
108: htmlCode['&'] = "&"; // ampersand
109: htmlCode['<'] = "<"; // lower than
110: htmlCode['>'] = ">"; // greater than
111:
112: for (int i = 128; i < 256; i++) {
113: htmlCode[i] = "&#" + i + ";";
114: }
115: }
116:
117: // constructors
118:
119: /**
120: * This class will never be constructed.
121: * <P>
122: * HtmlEncoder only contains static methods.
123: */
124:
125: private HtmlEncoder() {
126: }
127:
128: // methods
129:
130: /**
131: * Converts a <CODE>String</CODE> to the HTML-format of this <CODE>String</CODE>.
132: *
133: * @param string The <CODE>String</CODE> to convert
134: * @return a <CODE>String</CODE>
135: */
136:
137: public static String encode(String string) {
138: int n = string.length();
139: char character;
140: StringBuffer buffer = new StringBuffer();
141: // loop over all the characters of the String.
142: for (int i = 0; i < n; i++) {
143: character = string.charAt(i);
144: // the Htmlcode of these characters are added to a StringBuffer one by one
145: if (character < 256) {
146: buffer.append(htmlCode[character]);
147: } else {
148: // Improvement posted by Joachim Eyrich
149: buffer.append("&#").append((int) character).append(";");
150: }
151: }
152: return buffer.toString().trim();
153: }
154:
155: /**
156: * Converts a <CODE>Color</CODE> into a HTML representation of this <CODE>Color</CODE>.
157: *
158: * @param color the <CODE>Color</CODE> that has to be converted.
159: * @return the HTML representation of this <COLOR>Color</COLOR>
160: */
161:
162: public static String encode(Color color) {
163: StringBuffer buffer = new StringBuffer("#");
164: if (color.getRed() < 16) {
165: buffer.append('0');
166: }
167: buffer.append(Integer.toString(color.getRed(), 16));
168: if (color.getGreen() < 16) {
169: buffer.append('0');
170: }
171: buffer.append(Integer.toString(color.getGreen(), 16));
172: if (color.getBlue() < 16) {
173: buffer.append('0');
174: }
175: buffer.append(Integer.toString(color.getBlue(), 16));
176: return buffer.toString();
177: }
178:
179: }
|