/*
 * Created on 19.04.2005
 */
package basics.encoding;

import basics.utl.SUtl;

/**
 * @author ks
 */
public class HtmlEntityUtl
{
private HtmlEntityUtl()
{
}

/**
 * String contains signs which this function tries to encode as html entities.
 */
public static String encode(String s)
{
   if(s == null)
      return "";
   StringBuilder buf = new StringBuilder();
   int length = s.length();
   char c;
   for(int i = 0; i < length; ++i)
   {
      c = s.charAt(i);
      if((int)c >= 32 && (int)c <= 127)
         switch(c)
         {
         case '/':
            buf.append("Slash");
            break;
         case '&':
            buf.append("&amp;");
            break;
         case '<':
            buf.append("&lt;");
            break;
         case '>':
            buf.append("&gt;");
            break;
         case '"':
            buf.append("&quot;");
            break;
         default:
            buf.append(c);
         }
      else
         switch(c)
         {
         case 160:
            buf.append("&nbsp;");
            break; // Erzwungenes Leerzeichen
         case 161:
            buf.append("&iexcl;");
            break; // � umgekehrtes Ausrufezeichen
         case 162:
            buf.append("&cent;");
            break; // � Cent-Zeichen
         case 163:
            buf.append("&pound;");
            break; // � Pfund-Zeichen
         case 164:
            buf.append("&curren;");
            break; // � W�hrungs-Zeichen
         case 165:
            buf.append("&yen;");
            break; // � Yen-Zeichen
         case 166:
            buf.append("&brvbar;");
            break; // � durchbrochener Strich
         case 167:
            buf.append("&sect;");
            break; // � Paragraph-Zeichen
         case 168:
            buf.append("&uml;");
            break; // � P�nktchen oben
         case 169:
            buf.append("&copy;");
            break; // � Copyright-Zeichen
         case 170:
            buf.append("&ordf;");
            break; // � Ordinal-Zeichen weiblich
         case 171:
            buf.append("&laquo;");
            break; // � angewinkelte Anf�hrungszeichen links
         case 172:
            buf.append("&not;");
            break; // � Verneinungs-Zeichen
         case 173:
            buf.append("&shy;");
            break; // � kurzer Trennstrich
         case 174:
            buf.append("&reg;");
            break; // � Registriermarke-Zeichen
         case 175:
            buf.append("&macr;");
            break; // � �berstrich
         case 176:
            buf.append("&deg;");
            break; // � Grad-Zeichen
         case 177:
            buf.append("&plusmn;");
            break; // � Plusminus-Zeichen
         case 178:
            buf.append("&sup2;");
            break; // � Hoch-2-Zeichen
         case 179:
            buf.append("&sup3;");
            break; // � Hoch-3-Zeichen
         case 180:
            buf.append("&acute;");
            break; // � Acute-Zeichen
         case 181:
            buf.append("&micro;");
            break; // � Mikro-Zeichen
         case 182:
            buf.append("&para;");
            break; // � Absatz-Zeichen
         case 183:
            buf.append("&middot;");
            break; // � Mittelpunkt
         case 184:
            buf.append("&cedil;");
            break; // � H�kchen unten
         case 185:
            buf.append("&sup1;");
            break; // � Hoch-1-Zeichen
         case 186:
            buf.append("&ordm;");
            break; // � Ordinal-Zeichen m�nnlich
         case 187:
            buf.append("&raquo;");
            break; // � angewinkelte Anf�hrungszeichen rechts
         case 188:
            buf.append("&frac14;");
            break; // � ein Viertel
         case 189:
            buf.append("&frac12;");
            break; // � ein Halb
         case 190:
            buf.append("&frac34;");
            break; // � drei Viertel
         case 191:
            buf.append("&iquest;");
            break; // � umgekehrtes Fragezeichen
         case 192:
            buf.append("&Agrave;");
            break; // � A mit Accent grave
         case 193:
            buf.append("&Aacute;");
            break; // � A mit Accent acute
         case 194:
            buf.append("&Acirc;");
            break; // � A mit Circumflex
         case 195:
            buf.append("&Atilde;");
            break; // � A mit Tilde
         case 196:
            buf.append("&Auml;");
            break; // � A Umlaut
         case 197:
            buf.append("&Aring;");
            break; // � A mit Ring
         case 198:
            buf.append("&AElig;");
            break; // � A mit legiertem E
         case 199:
            buf.append("&Ccedil;");
            break; // � C mit H�kchen
         case 200:
            buf.append("&Egrave;");
            break; // � E mit Accent grave
         case 201:
            buf.append("&Eacute;");
            break; // � E mit Accent acute
         case 202:
            buf.append("&Ecirc;");
            break; // � E mit Circumflex
         case 203:
            buf.append("&Euml;");
            break; // � E Umlaut
         case 204:
            buf.append("&Igrave;");
            break; // � I mit Accent grave
         case 205:
            buf.append("&Iacute;");
            break; // � I mit Accent acute
         case 206:
            buf.append("&Icirc;");
            break; // � I mit Circumflex
         case 207:
            buf.append("&Iuml;");
            break; // � I Umlaut
         case 208:
            buf.append("&ETH;");
            break; // � Eth (isl�ndisch)
         case 209:
            buf.append("&Ntilde;");
            break; // � N mit Tilde
         case 210:
            buf.append("&Ograve;");
            break; // � O mit Accent grave
         case 211:
            buf.append("&Oacute;");
            break; // � O mit Accent acute
         case 212:
            buf.append("&Ocirc;");
            break; // � O mit Circumflex
         case 213:
            buf.append("&Otilde;");
            break; // � O mit Tilde
         case 214:
            buf.append("&Ouml;");
            break; // � O Umlaut
         case 215:
            buf.append("&times;");
            break; // � Mal-Zeichen
         case 216:
            buf.append("&Oslash;");
            break; // � O mit Schr�gstrich
         case 217:
            buf.append("&Ugrave;");
            break; // � U mit Accent grave
         case 218:
            buf.append("&Uacute;");
            break; // � U mit Accent acute
         case 219:
            buf.append("&Ucirc;");
            break; // � U mit Circumflex
         case 220:
            buf.append("&Uuml;");
            break; // � U Umlaut
         case 221:
            buf.append("&Yacute;");
            break; // � Y mit Accent acute
         case 222:
            buf.append("&THORN;");
            break; // � THORN (isl�ndisch)
         case 223:
            buf.append("&szlig;");
            break; // � scharfes S
         case 224:
            buf.append("&agrave;");
            break; // � a mit Accent grave
         case 225:
            buf.append("&aacute;");
            break; // � a mit Accent acute
         case 226:
            buf.append("&acirc;");
            break; // � a mit Circumflex
         case 227:
            buf.append("&atilde;");
            break; // � a mit Tilde
         case 228:
            buf.append("&auml;");
            break; // � a Umlaut
         case 229:
            buf.append("&aring;");
            break; // � a mit Ring
         case 230:
            buf.append("&aelig;");
            break; // � a mit legiertem e
         case 231:
            buf.append("&ccedil;");
            break; // � c mit H�kchen
         case 232:
            buf.append("&egrave;");
            break; // � e mit Accent grave
         case 233:
            buf.append("&eacute;");
            break; // � e mit Accent acute
         case 234:
            buf.append("&ecirc;");
            break; // � e mit Circumflex
         case 235:
            buf.append("&euml;");
            break; // � e Umlaut
         case 236:
            buf.append("&igrave;");
            break; // � i mit Accent grave
         case 237:
            buf.append("&iacute;");
            break; // � i mit Accent acute
         case 238:
            buf.append("&icirc;");
            break; // � i mit Circumflex
         case 239:
            buf.append("&iuml;");
            break; // � i Umlaut
         case 240:
            buf.append("&eth;");
            break; // � eth (isl�ndisch)
         case 241:
            buf.append("&ntilde;");
            break; // � n mit Tilde
         case 242:
            buf.append("&ograve;");
            break; // � o mit Accent grave
         case 243:
            buf.append("&oacute;");
            break; // � o mit Accent acute
         case 244:
            buf.append("&ocirc;");
            break; // � o mit Circumflex
         case 245:
            buf.append("&otilde;");
            break; // � o mit Tilde
         case 246:
            buf.append("&ouml;");
            break; // � o Umlaut
         case 247:
            buf.append("&divide;");
            break; // � Divisions-Zeichen
         case 248:
            buf.append("&oslash;");
            break; // � o mit Schr�gstrich
         case 249:
            buf.append("&ugrave;");
            break; // � u mit Accent grave
         case 250:
            buf.append("&uacute;");
            break; // � u mit Accent acute
         case 251:
            buf.append("&ucirc;");
            break; // � u mit Circumflex
         case 252:
            buf.append("&uuml;");
            break; // � u Umlaut
         case 253:
            buf.append("&yacute;");
            break; // � y mit Accent acute
         case 254:
            buf.append("&thorn;");
            break; // � thorn (isl�ndisch)
         case 255:
            buf.append("&yuml;");
            break; // � y Umlaut
         default:
            buf.append(c); // throw new RuntimeException("Don't know how to encode
            // '" + c + "' (ASCII code = " + ((int)c) + ")!");
         }
   }
   return buf.toString();
}

/**
 * Input contains html entities which a decoded to uft8 strings.
 * @param s
 * @return
 */
public static String decode(String s)
{
   if(s == null)
      return "";
   s = SUtl.replaceAll(s, "&amp;", String.valueOf('&'));
   s = SUtl.replaceAll(s, "&lt;", String.valueOf('<'));
   s = SUtl.replaceAll(s, "&gt;", String.valueOf('>'));
   s = SUtl.replaceAll(s, "&quot;", String.valueOf('\"'));
   s = SUtl.replaceAll(s, "&nbsp;", String.valueOf((char)160)); // erzwungenes
   // Leerzeichen
   s = SUtl.replaceAll(s, "&iexcl;", String.valueOf((char)161)); // �
   // umgekehrtes
   // Ausrufezeichen
   s = SUtl.replaceAll(s, "&cent;", String.valueOf((char)162)); // � Cent-Zeichen
   s = SUtl.replaceAll(s, "&pound;", String.valueOf((char)163)); // �
   // Pfund-Zeichen
   s = SUtl.replaceAll(s, "&curren;", String.valueOf((char)164)); // �
   // W�hrungs-Zeichen
   s = SUtl.replaceAll(s, "&yen;", String.valueOf((char)165)); // � Yen-Zeichen
   s = SUtl.replaceAll(s, "&brvbar;", String.valueOf((char)166)); // �
   // durchbrochener
   // Strich
   s = SUtl.replaceAll(s, "&sect;", String.valueOf((char)167)); // �
   // Paragraph-Zeichen
   s = SUtl.replaceAll(s, "&uml;", String.valueOf((char)168)); // � P�nktchen
   // oben
   s = SUtl.replaceAll(s, "&copy;", String.valueOf((char)169)); // �
   // Copyright-Zeichen
   s = SUtl.replaceAll(s, "&ordf;", String.valueOf((char)170)); // �
   // Ordinal-Zeichen
   // weiblich
   s = SUtl.replaceAll(s, "&laquo;", String.valueOf((char)171)); // �
   // angewinkelte
   // Anf�hrungszeichen
   // links
   s = SUtl.replaceAll(s, "&not;", String.valueOf((char)172)); // �
   // Verneinungs-Zeichen
   s = SUtl.replaceAll(s, "&shy;", String.valueOf((char)173)); // � kurzer
   // Trennstrich
   s = SUtl.replaceAll(s, "&reg;", String.valueOf((char)174)); // �
   // Registriermarke-Zeichen
   s = SUtl.replaceAll(s, "&macr;", String.valueOf((char)175)); // � �berstrich
   s = SUtl.replaceAll(s, "&deg;", String.valueOf((char)176)); // � Grad-Zeichen
   s = SUtl.replaceAll(s, "&plusmn;", String.valueOf((char)177)); // �
   // Plusminus-Zeichen
   s = SUtl.replaceAll(s, "&sup2;", String.valueOf((char)178)); // �
   // Hoch-2-Zeichen
   s = SUtl.replaceAll(s, "&sup3;", String.valueOf((char)179)); // �
   // Hoch-3-Zeichen
   s = SUtl.replaceAll(s, "&acute;", String.valueOf((char)180)); // �
   // Acute-Zeichen
   s = SUtl.replaceAll(s, "&micro;", String.valueOf((char)181)); // �
   // Mikro-Zeichen
   s = SUtl.replaceAll(s, "&para;", String.valueOf((char)182)); // �
   // Absatz-Zeichen
   s = SUtl.replaceAll(s, "&middot;", String.valueOf((char)183)); // �
   // Mittelpunkt
   s = SUtl.replaceAll(s, "&cedil;", String.valueOf((char)184)); // � H�kchen
   // unten
   s = SUtl.replaceAll(s, "&sup1;", String.valueOf((char)185)); // �
   // Hoch-1-Zeichen
   s = SUtl.replaceAll(s, "&ordm;", String.valueOf((char)186)); // �
   // Ordinal-Zeichen
   // m�nnlich
   s = SUtl.replaceAll(s, "&raquo;", String.valueOf((char)187)); // �
   // angewinkelte
   // Anf�hrungszeichen
   // rechts
   s = SUtl.replaceAll(s, "&frac14;", String.valueOf((char)188)); // � ein
   // Viertel
   s = SUtl.replaceAll(s, "&frac12;", String.valueOf((char)189)); // � ein Halb
   s = SUtl.replaceAll(s, "&frac34;", String.valueOf((char)190)); // � drei
   // Viertel
   s = SUtl.replaceAll(s, "&iquest;", String.valueOf((char)191)); // �
   // umgekehrtes
   // Fragezeichen
   s = SUtl.replaceAll(s, "&Agrave;", String.valueOf((char)192)); // � A mit
   // Accent
   // grave
   s = SUtl.replaceAll(s, "&Aacute;", String.valueOf((char)193)); // � A mit
   // Accent
   // acute
   s = SUtl.replaceAll(s, "&Acirc;", String.valueOf((char)194)); // � A mit
   // Circumflex
   s = SUtl.replaceAll(s, "&Atilde;", String.valueOf((char)195)); // � A mit
   // Tilde
   s = SUtl.replaceAll(s, "&Auml;", String.valueOf((char)196)); // � A Umlaut
   s = SUtl.replaceAll(s, "&Aring;", String.valueOf((char)197)); // � A mit
   // Ring
   s = SUtl.replaceAll(s, "&AElig;", String.valueOf((char)198)); // � A mit
   // legiertem
   // E
   s = SUtl.replaceAll(s, "&Ccedil;", String.valueOf((char)199)); // � C mit
   // H�kchen
   s = SUtl.replaceAll(s, "&Egrave;", String.valueOf((char)200)); // � E mit
   // Accent
   // grave
   s = SUtl.replaceAll(s, "&Eacute;", String.valueOf((char)201)); // � E mit
   // Accent
   // acute
   s = SUtl.replaceAll(s, "&Ecirc;", String.valueOf((char)202)); // � E mit
   // Circumflex
   s = SUtl.replaceAll(s, "&Euml;", String.valueOf((char)203)); // � E Umlaut
   s = SUtl.replaceAll(s, "&Igrave;", String.valueOf((char)204)); // � I mit
   // Accent
   // grave
   s = SUtl.replaceAll(s, "&Iacute;", String.valueOf((char)205)); // � I mit
   // Accent
   // acute
   s = SUtl.replaceAll(s, "&Icirc;", String.valueOf((char)206)); // � I mit
   // Circumflex
   s = SUtl.replaceAll(s, "&Iuml;", String.valueOf((char)207)); // � I Umlaut
   s = SUtl.replaceAll(s, "&ETH;", String.valueOf((char)208)); // � Eth
   // (isl�ndisch)
   s = SUtl.replaceAll(s, "&Ntilde;", String.valueOf((char)209)); // � N mit
   // Tilde
   s = SUtl.replaceAll(s, "&Ograve;", String.valueOf((char)210)); // � O mit
   // Accent
   // grave
   s = SUtl.replaceAll(s, "&Oacute;", String.valueOf((char)211)); // � O mit
   // Accent
   // acute
   s = SUtl.replaceAll(s, "&Ocirc;", String.valueOf((char)212)); // � O mit
   // Circumflex
   s = SUtl.replaceAll(s, "&Otilde;", String.valueOf((char)213)); // � O mit
   // Tilde
   s = SUtl.replaceAll(s, "&Ouml;", String.valueOf((char)214)); // � O Umlaut
   s = SUtl.replaceAll(s, "&times;", String.valueOf((char)215)); // �
   // Mal-Zeichen
   s = SUtl.replaceAll(s, "&Oslash;", String.valueOf((char)216)); // � O mit
   // Schr�gstrich
   s = SUtl.replaceAll(s, "&Ugrave;", String.valueOf((char)217)); // � U mit
   // Accent
   // grave
   s = SUtl.replaceAll(s, "&Uacute;", String.valueOf((char)218)); // � U mit
   // Accent
   // acute
   s = SUtl.replaceAll(s, "&Ucirc;", String.valueOf((char)219)); // � U mit
   // Circumflex
   s = SUtl.replaceAll(s, "&Uuml;", String.valueOf((char)220)); // � U Umlaut
   s = SUtl.replaceAll(s, "&Yacute;", String.valueOf((char)221)); // � Y mit
   // Accent
   // acute
   s = SUtl.replaceAll(s, "&THORN;", String.valueOf((char)222)); // � THORN
   // (isl�ndisch)
   s = SUtl.replaceAll(s, "&szlig;", String.valueOf((char)223)); // � scharfes
   // S
   s = SUtl.replaceAll(s, "&agrave;", String.valueOf((char)224)); // � a mit
   // Accent
   // grave
   s = SUtl.replaceAll(s, "&aacute;", String.valueOf((char)225)); // � a mit
   // Accent
   // acute
   s = SUtl.replaceAll(s, "&acirc;", String.valueOf((char)226)); // � a mit
   // Circumflex
   s = SUtl.replaceAll(s, "&atilde;", String.valueOf((char)227)); // � a mit
   // Tilde
   s = SUtl.replaceAll(s, "&auml;", String.valueOf((char)228)); // � a Umlaut
   s = SUtl.replaceAll(s, "&aring;", String.valueOf((char)229)); // � a mit
   // Ring
   s = SUtl.replaceAll(s, "&aelig;", String.valueOf((char)230)); // � a mit
   // legiertem
   // e
   s = SUtl.replaceAll(s, "&ccedil;", String.valueOf((char)231)); // � c mit
   // H�kchen
   s = SUtl.replaceAll(s, "&egrave;", String.valueOf((char)232)); // � e mit
   // Accent
   // grave
   s = SUtl.replaceAll(s, "&eacute;", String.valueOf((char)233)); // � e mit
   // Accent
   // acute
   s = SUtl.replaceAll(s, "&ecirc;", String.valueOf((char)234)); // � e mit
   // Circumflex
   s = SUtl.replaceAll(s, "&euml;", String.valueOf((char)235)); // � e Umlaut
   s = SUtl.replaceAll(s, "&igrave;", String.valueOf((char)236)); // � i mit
   // Accent
   // grave
   s = SUtl.replaceAll(s, "&iacute;", String.valueOf((char)237)); // � i mit
   // Accent
   // acute
   s = SUtl.replaceAll(s, "&icirc;", String.valueOf((char)238)); // � i mit
   // Circumflex
   s = SUtl.replaceAll(s, "&iuml;", String.valueOf((char)239)); // � i Umlaut
   s = SUtl.replaceAll(s, "&eth;", String.valueOf((char)240)); // � eth
   // (isl�ndisch)
   s = SUtl.replaceAll(s, "&ntilde;", String.valueOf((char)241)); // � n mit
   // Tilde
   s = SUtl.replaceAll(s, "&ograve;", String.valueOf((char)242)); // � o mit
   // Accent
   // grave
   s = SUtl.replaceAll(s, "&oacute;", String.valueOf((char)243)); // � o mit
   // Accent
   // acute
   s = SUtl.replaceAll(s, "&ocirc;", String.valueOf((char)244)); // � o mit
   // Circumflex
   s = SUtl.replaceAll(s, "&otilde;", String.valueOf((char)245)); // � o mit
   // Tilde
   s = SUtl.replaceAll(s, "&ouml;", String.valueOf((char)246)); // � o Umlaut
   s = SUtl.replaceAll(s, "&divide;", String.valueOf((char)247)); // �
   // Divisions-Zeichen
   s = SUtl.replaceAll(s, "&oslash;", String.valueOf((char)248)); // � o mit
   // Schr�gstrich
   s = SUtl.replaceAll(s, "&ugrave;", String.valueOf((char)249)); // � u mit
   // Accent
   // grave
   s = SUtl.replaceAll(s, "&uacute;", String.valueOf((char)250)); // � u mit
   // Accent
   // acute
   s = SUtl.replaceAll(s, "&ucirc;", String.valueOf((char)251)); // � u mit
   // Circumflex
   s = SUtl.replaceAll(s, "&uuml;", String.valueOf((char)252)); // � u Umlaut
   s = SUtl.replaceAll(s, "&yacute;", String.valueOf((char)253)); // � y mit
   // Accent
   // acute
   s = SUtl.replaceAll(s, "&thorn;", String.valueOf((char)254)); // � thorn
   // (isl�ndisch)
   s = SUtl.replaceAll(s, "&yuml;", String.valueOf((char)255)); // � y Umlaut
   return s;
}

public static String removeEntities(String s)
{
   s = s.replaceAll("&.{2,8};", "");
   return s;
}

/**
 * Input string contains html entities which a transcribed to ascii.
 * @param s
 * @return
 */
public static String transcribeEntities(String s)
{
   if(s == null)
      return "";
   s = SUtl.replaceAll(s, "&amp;", String.valueOf('&'));
   s = SUtl.replaceAll(s, "&lt;", String.valueOf('<'));
   s = SUtl.replaceAll(s, "&gt;", String.valueOf('>'));
   s = SUtl.replaceAll(s, "&quot;", String.valueOf('\"'));
   s = SUtl.replaceAll(s, "&nbsp;", " "); // erzwungenes Leerzeichen
   s = SUtl.replaceAll(s, "&iexcl;", "!"); // � umgekehrtes Ausrufezeichen
   s = SUtl.replaceAll(s, "&cent;", "Cent"); // � Cent-Zeichen
   s = SUtl.replaceAll(s, "&pound;", "GDP"); // � Pfund-Zeichen
   s = SUtl.replaceAll(s, "&curren;", "Currency"); // � W�hrungs-Zeichen
   s = SUtl.replaceAll(s, "&yen;", "JN"); // � Yen-Zeichen
   s = SUtl.replaceAll(s, "&brvbar;", "|"); // � durchbrochener Strich
   s = SUtl.replaceAll(s, "&sect;", "$"); // � Paragraph-Zeichen
   s = SUtl.replaceAll(s, "&uml;", ""); // � P�nktchen oben
   s = SUtl.replaceAll(s, "&copy;", "(C)"); // � Copyright-Zeichen
   s = SUtl.replaceAll(s, "&ordf;", "a"); // � Ordinal-Zeichen weiblich
   s = SUtl.replaceAll(s, "&laquo;", "<<"); // � angewinkelte Anf�hrungszeichen
   // links
   s = SUtl.replaceAll(s, "&not;", "!"); // � Verneinungs-Zeichen
   s = SUtl.replaceAll(s, "&shy;", "-"); // � kurzer Trennstrich
   s = SUtl.replaceAll(s, "&reg;", "(R)"); // � Registriermarke-Zeichen
   s = SUtl.replaceAll(s, "&macr;", ""); // � �berstrich
   s = SUtl.replaceAll(s, "&deg;", "°"); // � Grad-Zeichen
   s = SUtl.replaceAll(s, "&plusmn;", "+/-"); // � Plusminus-Zeichen
   s = SUtl.replaceAll(s, "&sup2;", "^2"); // � Hoch-2-Zeichen
   s = SUtl.replaceAll(s, "&sup3;", "^3"); // � Hoch-3-Zeichen
   s = SUtl.replaceAll(s, "&acute;", ""); // � Acute-Zeichen
   s = SUtl.replaceAll(s, "&micro;", "micro"); // � Mikro-Zeichen
   s = SUtl.replaceAll(s, "&para;", " "); // � Absatz-Zeichen
   s = SUtl.replaceAll(s, "&middot;", "."); // � Mittelpunkt
   s = SUtl.replaceAll(s, "&cedil;", ""); // � H�kchen unten
   s = SUtl.replaceAll(s, "&sup1;", "^1"); // � Hoch-1-Zeichen
   s = SUtl.replaceAll(s, "&ordm;", "o"); // � Ordinal-Zeichen m�nnlich
   s = SUtl.replaceAll(s, "&raquo;", ">>"); // � angewinkelte Anf�hrungszeichen
   // rechts
   s = SUtl.replaceAll(s, "&frac14;", "1/4"); // � ein Viertel
   s = SUtl.replaceAll(s, "&frac12;", "1/2"); // � ein Halb
   s = SUtl.replaceAll(s, "&frac34;", "3/4"); // � drei Viertel
   s = SUtl.replaceAll(s, "&iquest;", "?"); // � umgekehrtes Fragezeichen
   s = SUtl.replaceAll(s, "&Agrave;", "A"); // � A mit Accent grave
   s = SUtl.replaceAll(s, "&Aacute;", "A"); // � A mit Accent acute
   s = SUtl.replaceAll(s, "&Acirc;", "A"); // � A mit Circumflex
   s = SUtl.replaceAll(s, "&Atilde;", "A"); // � A mit Tilde
   s = SUtl.replaceAll(s, "&Auml;", "Ae"); // � A Umlaut
   s = SUtl.replaceAll(s, "&Aring;", "A"); // � A mit Ring
   s = SUtl.replaceAll(s, "&AElig;", "AE"); // � A mit legiertem E
   s = SUtl.replaceAll(s, "&Ccedil;", "C"); // � C mit H�kchen
   s = SUtl.replaceAll(s, "&Egrave;", "E"); // � E mit Accent grave
   s = SUtl.replaceAll(s, "&Eacute;", "E"); // � E mit Accent acute
   s = SUtl.replaceAll(s, "&Ecirc;", "E"); // � E mit Circumflex
   s = SUtl.replaceAll(s, "&Euml;", "E"); // � E Umlaut
   s = SUtl.replaceAll(s, "&Igrave;", "I"); // � I mit Accent grave
   s = SUtl.replaceAll(s, "&Iacute;", "I"); // � I mit Accent acute
   s = SUtl.replaceAll(s, "&Icirc;", "I"); // � I mit Circumflex
   s = SUtl.replaceAll(s, "&Iuml;", "I"); // � I Umlaut
   s = SUtl.replaceAll(s, "&ETH;", "Eth"); // � Eth (isl�ndisch)
   s = SUtl.replaceAll(s, "&Ntilde;", "N"); // � N mit Tilde
   s = SUtl.replaceAll(s, "&Ograve;", "O"); // � O mit Accent grave
   s = SUtl.replaceAll(s, "&Oacute;", "O"); // � O mit Accent acute
   s = SUtl.replaceAll(s, "&Ocirc;", "O"); // � O mit Circumflex
   s = SUtl.replaceAll(s, "&Otilde;", "O"); // � O mit Tilde
   s = SUtl.replaceAll(s, "&Ouml;", "Oe"); // � O Umlaut
   s = SUtl.replaceAll(s, "&times;", "x"); // � Mal-Zeichen
   s = SUtl.replaceAll(s, "&Oslash;", "O"); // � O mit Schr�gstrich
   s = SUtl.replaceAll(s, "&Ugrave;", "U"); // � U mit Accent grave
   s = SUtl.replaceAll(s, "&Uacute;", "U"); // � U mit Accent acute
   s = SUtl.replaceAll(s, "&Ucirc;", "U"); // � U mit Circumflex
   s = SUtl.replaceAll(s, "&Uuml;", "Ue"); // � U Umlaut
   s = SUtl.replaceAll(s, "&Yacute;", "Y"); // � Y mit Accent acute
   s = SUtl.replaceAll(s, "&THORN;", "Th"); // � THORN (isl�ndisch)
   s = SUtl.replaceAll(s, "&szlig;", "ss"); // � scharfes S
   s = SUtl.replaceAll(s, "&agrave;", "a"); // � a mit Accent grave
   s = SUtl.replaceAll(s, "&aacute;", "a"); // � a mit Accent acute
   s = SUtl.replaceAll(s, "&acirc;", "a"); // � a mit Circumflex
   s = SUtl.replaceAll(s, "&atilde;", "a"); // � a mit Tilde
   s = SUtl.replaceAll(s, "&auml;", "ae"); // � a Umlaut
   s = SUtl.replaceAll(s, "&aring;", "a"); // � a mit Ring
   s = SUtl.replaceAll(s, "&aelig;", "ae"); // � a mit legiertem e
   s = SUtl.replaceAll(s, "&ccedil;", "c"); // � c mit H�kchen
   s = SUtl.replaceAll(s, "&egrave;", "e"); // � e mit Accent grave
   s = SUtl.replaceAll(s, "&eacute;", "e"); // � e mit Accent acute
   s = SUtl.replaceAll(s, "&ecirc;", "e"); // � e mit Circumflex
   s = SUtl.replaceAll(s, "&euml;", "e"); // � e Umlaut
   s = SUtl.replaceAll(s, "&igrave;", "i"); // � i mit Accent grave
   s = SUtl.replaceAll(s, "&iacute;", "i"); // � i mit Accent acute
   s = SUtl.replaceAll(s, "&icirc;", "i"); // � i mit Circumflex
   s = SUtl.replaceAll(s, "&iuml;", "i"); // � i Umlaut
   s = SUtl.replaceAll(s, "&eth;", "eth"); // � eth (isl�ndisch)
   s = SUtl.replaceAll(s, "&ntilde;", "n"); // � n mit Tilde
   s = SUtl.replaceAll(s, "&ograve;", "o"); // � o mit Accent grave
   s = SUtl.replaceAll(s, "&oacute;", "o"); // � o mit Accent acute
   s = SUtl.replaceAll(s, "&ocirc;", "o"); // � o mit Circumflex
   s = SUtl.replaceAll(s, "&otilde;", "o"); // � o mit Tilde
   s = SUtl.replaceAll(s, "&ouml;", "oe"); // � o Umlaut
   s = SUtl.replaceAll(s, "&divide;", "/"); // � Divisions-Zeichen
   s = SUtl.replaceAll(s, "&oslash;", "o"); // � o mit Schr�gstrich
   s = SUtl.replaceAll(s, "&ugrave;", "u"); // � u mit Accent grave
   s = SUtl.replaceAll(s, "&uacute;", "u"); // � u mit Accent acute
   s = SUtl.replaceAll(s, "&ucirc;", "u"); // � u mit Circumflex
   s = SUtl.replaceAll(s, "&uuml;", "ue"); // � u Umlaut
   s = SUtl.replaceAll(s, "&yacute;", "y"); // � y mit Accent acute
   s = SUtl.replaceAll(s, "&thorn;", "th"); // � thorn (isl�ndisch)
   s = SUtl.replaceAll(s, "&yuml;", "y"); // � y Umlaut
   return s;
}
}
