/* Copyright (c) 2003 eInnovation Inc. All rights reserved 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. */ /* * Created on Apr 22, 2003 * * To change this generated comment go to * Window>Preferences>Java>Code Generation>Code Template */ package com.openedit.modules.edit; import java.util.HashMap; import java.util.Iterator; import java.util.Map; /** * DOCUMENT ME! * * @author avery */ public class SpecialCharacter { /** * This function is a work around to deal with non UTF-8 encoding * It will convert the most commonly found "strange" characters into * standard HTML text * * @param s * * @return */ public static String escapeSpecialCharacters(String s) { if ( s == null ) { return null; } StringBuffer sb = new StringBuffer(); int n = s.length(); for (int i = 0; i < n; i++) { char c = s.charAt(i); if (c > 127) { switch (c) { // case '<': sb.append("<"); break; // // case '>': sb.append(">"); break; // // // case '&': sb.append("&"); break; // // case '"': sb.append("""); break; // // case '\'': sb.append("'"); break; // // try alpha substitutions first case '\u00E0': sb.append("à"); break; // case '\u00C0': sb.append("À"); break; // case '\u00E2': sb.append("â"); break; // case '\u00C2': sb.append("Â"); break; // case '\u00E4': sb.append("ä"); break; // case '\u00C4': sb.append("Ä"); break; // case '\u00E5': sb.append("å"); break; // case '\u00C5': sb.append("Å"); break; // case '\u00E6': sb.append("æ"); break; // case '\u00C6': sb.append("Æ"); break; // case '\u00E7': sb.append("ç"); break; // case '\u00C7': sb.append("Ç"); break; // case '\u00E8': sb.append("é"); break; // case '\u00C8': sb.append("É"); break; // case '\u00E9': sb.append("è"); break; // case '\u00C9': sb.append("È"); break; // case '\u00EA': sb.append("ê"); break; // case '\u00CA': sb.append("Ê"); break; // case '\u00EB': sb.append("ë"); break; // case '\u00CB': sb.append("Ë"); break; // case '\u00EF': sb.append("ï"); break; // case '\u00CF': sb.append("Ï"); break; // case '\u00F5': sb.append("ô"); break; // case '\u00D5': sb.append("Ô"); break; // case '\u00F6': sb.append("ö"); break; // case '\u00D6': sb.append("Ö"); break; // case '\u00F8': sb.append("ø"); break; // case '\u00D8': sb.append("Ø"); break; // case '\u00DF': sb.append("ß"); break; // case '\u00F9': sb.append("ù"); break; // case '\u00D9': sb.append("Ù"); break; // case '\u00FB': sb.append("û"); break; // case '\u00DB': sb.append("Û"); break; // case '\u00FC': sb.append("ü"); break; // case '\u00DC': sb.append("Ü"); break; // case '\u00AE': sb.append("®"); break; // case '\u00A9': sb.append("©"); break; // case '\u20AC': sb.append("€"); break; // euro case '\u2013': sb.append("–"); break; // euro case '\u2014': sb.append("—"); break; // euro case '\u2018': sb.append("‘"); break; // euro case '\u2019': sb.append("’"); break; // euro case '\u201C': sb.append("“"); break; // euro case '\u201D': sb.append("”"); break; // euro default: sb.append("&#" + Integer.toString(c) + ";"); break; // } } // end if else { if ( c == '&' ) { sb.append( "&" ); } else { sb.append(c); } } } return sb.toString(); } /** * DOCUMENT ME! * * @param inString * * @return */ public static String toUnicode(String inString) { Map matches = new HashMap(); // how big should this number be? for (int i = 0; i < 10000; i++) { String symbol = "&#" + Integer.toString(i) + ";"; if (inString.indexOf(symbol) > -1) { matches.put(symbol, Integer.toHexString(i)); } } addSpecialMatch(inString, matches, "'", "'"); addSpecialMatch(inString, matches, "<", "<"); addSpecialMatch(inString, matches, ">", ">"); addSpecialMatch(inString, matches, ""e;", "\""); addSpecialMatch(inString, matches, "&", "&"); addSpecialMatch(inString, matches, "à", "\u00E0"); // addSpecialMatch(inString, matches, "À", "\u00C0"); // addSpecialMatch(inString, matches, "â", "\u00E2"); // addSpecialMatch(inString, matches, "Â", "\u00C2"); // addSpecialMatch(inString, matches, "ä", "\u00E4"); // addSpecialMatch(inString, matches, "Ä", "\u00C4"); // addSpecialMatch(inString, matches, "å", "\u00E5"); // addSpecialMatch(inString, matches, "Å", "\u00C5"); // addSpecialMatch(inString, matches, "æ", "\u00E6"); // addSpecialMatch(inString, matches, "Æ", "\u00C6"); // addSpecialMatch(inString, matches, "ç", "\u00E7"); // addSpecialMatch(inString, matches, "Ç", "\u00C7"); // addSpecialMatch(inString, matches, "é", "\u00E8"); // addSpecialMatch(inString, matches, "É", "\u00C8"); // addSpecialMatch(inString, matches, "è", "\u00E9"); // addSpecialMatch(inString, matches, "È", "\u00C9"); // addSpecialMatch(inString, matches, "ê", "\u00EA"); // addSpecialMatch(inString, matches, "Ê", "\u00CA"); // addSpecialMatch(inString, matches, "ë", "\u00EB"); // addSpecialMatch(inString, matches, "Ë", "\u00CB"); // addSpecialMatch(inString, matches, "ï", "\u00EF"); // addSpecialMatch(inString, matches, "Ï", "\u00CF"); // addSpecialMatch(inString, matches, "ô", "\u00F5"); // addSpecialMatch(inString, matches, "Ô", "\u00D5"); // addSpecialMatch(inString, matches, "ö", "\u00F6"); // addSpecialMatch(inString, matches, "Ö", "\u00D6"); // addSpecialMatch(inString, matches, "ø", "\u00F8"); // addSpecialMatch(inString, matches, "Ø", "\u00D8"); // addSpecialMatch(inString, matches, "ß", "\u00DF"); // addSpecialMatch(inString, matches, "ù", "\u00F9"); // addSpecialMatch(inString, matches, "Ù", "\u00D9"); // addSpecialMatch(inString, matches, "û", "\u00FB"); // addSpecialMatch(inString, matches, "Û", "\u00DB"); // addSpecialMatch(inString, matches, "ü", "\u00FC"); // addSpecialMatch(inString, matches, "Ü", "\u00DC"); // addSpecialMatch(inString, matches, "®", "\u00AE"); // addSpecialMatch(inString, matches, "©", "\u00A9"); // addSpecialMatch(inString, matches, "€", "\u20AC"); // euro for (Iterator iter = matches.keySet().iterator(); iter.hasNext();) { String symbol = (String) iter.next(); inString = inString.replaceAll(symbol, (String) matches.get(symbol)); } return inString; } private static void addSpecialMatch( String inString, Map matches, String inSymbol, String inUnicode) { if (inString.indexOf(inSymbol) > -1) { matches.put(inSymbol, inUnicode); } } }