Diff for /FM2SQL/Attic/Convert.java between versions 1.64 and 1.71

version 1.64, 2004/07/28 11:21:01 version 1.71, 2004/08/09 11:36:18
Line 29  import java.sql.PreparedStatement; Line 29  import java.sql.PreparedStatement;
 import java.sql.SQLException;  import java.sql.SQLException;
 import java.sql.Statement;  import java.sql.Statement;
 import java.sql.Types;  import java.sql.Types;
   import java.text.ParseException;
 import java.util.ArrayList;  import java.util.ArrayList;
   import java.util.Hashtable;
 import java.util.Iterator;  import java.util.Iterator;
 import java.util.List;  import java.util.List;
 import java.util.StringTokenizer;  import java.util.StringTokenizer;
Line 41  import com.exploringxml.xml.Xparse; Line 43  import com.exploringxml.xml.Xparse;
   
 class Convert  class Convert
 {  {
     /**Helper class for index creation
      * @author rogo
      *
      */
     public static class IndexList extends Vector
     {
       public String toString()
       {
         StringBuffer buff = new StringBuffer(1000);
         int count = 0;
         for (Iterator iter = this.iterator(); iter.hasNext();)
         {
           String element = (String) iter.next();
           if (count < elementCount - 1)
           {
             buff.append(element).append(", ");
             count++;
           } else
             buff.append(element);
   
         }
   
         return buff.toString();
       }
     }
   static DBBean bean = new DBBean();    static DBBean bean = new DBBean();
   static DBBean beanDest = new DBBean();    static DBBean beanDest = new DBBean();
   
Line 1125  class Convert Line 1152  class Convert
     Vector selects = new Vector();      Vector selects = new Vector();
     Vector creates = new Vector();      Vector creates = new Vector();
     Vector ids = new Vector();      Vector ids = new Vector();
       Vector indexListVec = new Vector();
     String delimiter = "|";      String delimiter = "|";
     int mode = -1;      int mode = -1;
   
Line 1144  class Convert Line 1172  class Convert
         selects = new Vector();          selects = new Vector();
         creates = new Vector();          creates = new Vector();
         ids = new Vector();          ids = new Vector();
           indexListVec = new Vector();
         // parse dataBase          // parse dataBase
         Node node = root.find("convert/source/database/url", new int[] { 1, 1, i, 1 });          Node node = root.find("convert/source/database/url", new int[] { 1, 1, i, 1 });
         Node node1 = root.find("convert/source/database/user", new int[] { 1, 1, i, 1, 1 });          Node node1 = root.find("convert/source/database/user", new int[] { 1, 1, i, 1, 1 });
Line 1218  class Convert Line 1247  class Convert
           String name = (String) node4.attributes.get("name");            String name = (String) node4.attributes.get("name");
           String layout = (String) node4.attributes.get("layout");            String layout = (String) node4.attributes.get("layout");
           String id = (String) node4.attributes.get("id");            String id = (String) node4.attributes.get("id");
             String indexList = (String) node4.attributes.get("indexList");
   
           System.out.println("id was " + id);            System.out.println("id was " + id);
           if (name == null)            if (name == null)
             throw new Error("parse error required table tag attribute name missing");              throw new Error("parse error required table tag attribute name missing");
Line 1225  class Convert Line 1256  class Convert
             layout = "";              layout = "";
           if (id == null)            if (id == null)
             id = "";              id = "";
             if (indexList == null)
               indexList = "";
           if (name.equals(""))            if (name.equals(""))
             throw new Error("parse error table tag attribute must not be empty");              throw new Error("parse error table tag attribute must not be empty");
           tables.add(name);            tables.add(name);
           layouts.add(layout);            layouts.add(layout);
   
           ids.add(id);            ids.add(id);
             indexListVec.add(indexList);
           String query = (node5 == null) ? "" : node5.getCharacters();            String query = (node5 == null) ? "" : node5.getCharacters();
           if (query.equals(""))            if (query.equals(""))
             System.err.println("Warning empty select tag or  select tag missing !!");              System.err.println("Warning empty select tag or  select tag missing !!");
Line 1243  class Convert Line 1278  class Convert
         }          }
         DataBase dataBase = new DataBase(database, tables, layouts, selects, creates, ids, mode);          DataBase dataBase = new DataBase(database, tables, layouts, selects, creates, ids, mode);
         dataBase.delimiter = delimiter;          dataBase.delimiter = delimiter;
           dataBase.buildIndexTable(indexListVec);
         databases.add(dataBase);          databases.add(dataBase);
       }        }
       DBBean database = new DBBean();        DBBean database = new DBBean();
Line 1262  class Convert Line 1298  class Convert
         DataBase db = (DataBase) iter.next();          DataBase db = (DataBase) iter.next();
         if (mode == DataBase.CONVERT_MODE || mode == DataBase.APPEND_MODE)          if (mode == DataBase.CONVERT_MODE || mode == DataBase.APPEND_MODE)
           convertBatch(db.bean, database, db.tables, db.layouts, db.selects, db.creates, db.ids, mode, db.delimiter);            convertBatch(db.bean, database, db.tables, db.layouts, db.selects, db.creates, db.ids, mode, db.delimiter);
         else          else if (mode == DataBase.UPDATE_MODE)
         if (mode == DataBase.UPDATE_MODE)  
             update(db.bean.url, database.url, db.tables, db.layouts, db.selects, db.creates, db.ids, mode);              update(db.bean.url, database.url, db.tables, db.layouts, db.selects, db.creates, db.ids, mode);
         else if(mode==DataBase.SYNCHRONIZE_MODE)          else if(mode==DataBase.SYNCHRONIZE_MODE)
         {          {
Line 1272  class Convert Line 1307  class Convert
           userDest =database.user;            userDest =database.user;
           passwdDest =database.passwd;            passwdDest =database.passwd;
                       
           synchronize(db.bean.url, database.url, db.tables, db.layouts, db.selects, db.creates, db.ids, mode);            synchronize(db.bean.url, database.url, db.tables, db.layouts, db.selects, db.creates, db.ids, mode, db.delimiter, new Vector(db.htIndex.values()));
         }           } 
       }        }
       // printContents(node3);        // printContents(node3);
Line 1281  class Convert Line 1316  class Convert
     {      {
   
       e.printStackTrace();        e.printStackTrace();
   
       } finally
       {
         bean.closeAllConnections();
         beanDest.closeAllConnections();
     }      }
   }    }
   public static Vector getXMLConfig(String xmlFile)    public static Vector getXMLConfig(String xmlFile)
Line 1513  class Convert Line 1553  class Convert
       {        {
         URL url=new URL(xmlFile);          URL url=new URL(xmlFile);
         stream = url.openStream();          stream = url.openStream();
       }        } else
       else   
      // read XML Metadata from a file       // read XML Metadata from a file
        stream = new FileInputStream(xmlFile);         stream = new FileInputStream(xmlFile);
       InputStreamReader isr = new InputStreamReader(stream, "UTF-8");        InputStreamReader isr = new InputStreamReader(stream, "UTF-8");
Line 1570  class Convert Line 1609  class Convert
     Vector tables;      Vector tables;
     Vector ids;      Vector ids;
     String delimiter = "//";      String delimiter = "//";
       /**
        * maps table name to index fields
        */
       Hashtable htIndex = new Hashtable();
     boolean useNormanToUnicodeMapper = false;      boolean useNormanToUnicodeMapper = false;
           
     final static int CONVERT_MODE = 1;      final static int CONVERT_MODE = 1;
Line 1592  class Convert Line 1635  class Convert
       this.bean.setIDVector(ids);        this.bean.setIDVector(ids);
     }      }
     /**      /**
        * @param indexListVec
        */
       public void buildIndexTable(Vector indexListVec)
       {
         for (int i = 0; i < tables.size(); i++)
         {
           fillIndexList((String) tables.get(i), (String) indexListVec.get(i));
         }
       }
       /**
      * writes the data contained in this object to the buffered writer       * writes the data contained in this object to the buffered writer
      * * @param buffr       * * @param buffr
      * @throws Exception       * @throws Exception
Line 1625  class Convert Line 1678  class Convert
         String select = (String) selects.get(index);          String select = (String) selects.get(index);
         String create = (String) creates.get(index);          String create = (String) creates.get(index);
         String id = (String) ids.get(index);          String id = (String) ids.get(index);
           IndexList indexList = (IndexList) htIndex.get(table);
         buffr.write("      <table name = \"" + table + "\" layout = \"" + layout + "\" id = \"" + id + "\" >\n");          if (indexList == null)
             indexList = new IndexList();
           buffr.write("      <table name = \"" + table + "\" layout = \"" + layout + "\" id = \"" + id + "\" indexList =\"" + indexList + "\">\n");
         buffr.write("         <select>" + convertToEntities(select) + "</select>\n");          buffr.write("         <select>" + convertToEntities(select) + "</select>\n");
         if (!create.equals(""))          if (!create.equals(""))
           buffr.write("         <create>" + create + "         </create>\n");            buffr.write("         <create>" + create + "         </create>\n");
Line 1635  class Convert Line 1690  class Convert
       }        }
       buffr.write("    </database>\n");        buffr.write("    </database>\n");
     }      }
   
       public void fillIndexList(String table, String list)
       {
         IndexList indexList = new IndexList();
         StringTokenizer tokenizer = new StringTokenizer(list, ",");
         while (tokenizer.hasMoreTokens())
         {
           indexList.add(tokenizer.nextToken());
         }
         System.out.println(indexList);
   
         htIndex.put(table, indexList);
       }
     public String toString()      public String toString()
     {      {
       return bean.url + " " + tables;        return bean.url + " " + tables;
Line 1877  class Convert Line 1945  class Convert
     }      }
   } // to method    } // to method
       
     
   /**    /**
    * synchronize method based on delete method code     * synchronize method based on delete method code
    *      * 
Line 1893  class Convert Line 1960  class Convert
    */     */
   // TODO implement append,update and delete in one method    // TODO implement append,update and delete in one method
   // TODO using id based algorithm    // TODO using id based algorithm
   public static void synchronize(String source, String destination, Vector names, Vector layouts, Vector selects, Vector creates, Vector ids, int mode) throws Exception    public static void synchronize(String source, String destination, Vector names, Vector layouts, Vector selects, Vector creates, Vector ids, int mode, String delimiter, Vector indexList)
       throws Exception
   {    {
     System.out.println(" bin in synchronize!!!");      System.out.println(" bin in synchronize!!!");
     FM2SQL.ProgressDialog dialog = null;      FM2SQL.ProgressDialog dialog = null;
Line 1951  class Convert Line 2019  class Convert
             System.out.println("added layout  " + query);              System.out.println("added layout  " + query);
   
           }            }
           if(dialog!=null) {            if (dialog != null)
             {
           dialog.title.setText("Getting table data ...");            dialog.title.setText("Getting table data ...");
           dialog.table.setText(names.get(tbIndex).toString());            dialog.table.setText(names.get(tbIndex).toString());
           dialog.status.setText("Table " + (tbIndex + 1) + " of " + names.size());            dialog.status.setText("Table " + (tbIndex + 1) + " of " + names.size());
Line 1996  class Convert Line 2065  class Convert
         {          {
           long startTime = System.currentTimeMillis();            long startTime = System.currentTimeMillis();
           int counter = -1;            int counter = -1;
             TreeSet linesToDelete = null;
             PreparedStatement delPSt = null;
           while (true)            while (true)
           {            {
             ++counter;              ++counter;
Line 2003  class Convert Line 2074  class Convert
               dialog.title.setText("Check if data  is available");                dialog.title.setText("Check if data  is available");
             else if (dialog != null)              else if (dialog != null)
               dialog.title.setText("Check if more  data  is available");                dialog.title.setText("Check if more  data  is available");
             myIds = bean.getIDVector(ids.get(tbIndex).toString(), (String) names.get(tbIndex), tempQuery, numHits);              myIds = bean.getIDVector(ids.get(tbIndex).toString(), (String) names.get(tbIndex), tempQuery, 0);
             myIdsDest = beanDest.getIDVector(convertText(idField), destTableName, tempQueryDest, numHits);              myIdsDest = beanDest.getIDVector(convertText(idField), destTableName, tempQueryDest, 0);
               //System.out.println("status of remove  "+myIds.remove("b015892"));
             if (myIds.isEmpty())              if (myIds.isEmpty())
               break;                break;
             vec = new Vector(myIds);              vec = new Vector(myIds);
Line 2012  class Convert Line 2084  class Convert
             rowCount = vec.size();              rowCount = vec.size();
             // Deletion will work this way              // Deletion will work this way
             Vector deleted = new Vector(vec);              Vector deleted = new Vector(vec);
             Vector linesToDelete = new Vector(vecDest);  
                           
             TreeSet linesToAppend = new TreeSet(vec);              TreeSet linesToAppend = new TreeSet(vec);
               linesToAppend.addAll(vec);
               linesToDelete = new TreeSet(vecDest);
             // remove all lines that are already in dest database              // remove all lines that are already in dest database
             linesToAppend.removeAll(vecDest);              linesToAppend.removeAll(vecDest);
             // remove all lines that should not be deleted              // remove all lines that should not be deleted
             linesToDelete.removeAll(deleted);              linesToDelete.removeAll(deleted);
             System.out.println("linesToAppend "+linesToAppend+" "+vecDest+" "+destTableName);              System.out.println("linesToAppend " + linesToAppend + " " + destTableName);
             System.out.println("linesToDelete "+linesToDelete+" "+vecDest+" "+destTableName);              System.out.println("linesToDelete " + linesToDelete + " " + destTableName);
              // prepare new query for next chunk              System.out.println("ID LIST SIZE " + Math.round((double) myIds.size() / (double) numIntervalls) + " " + myIds.size());
                 if (query.indexOf("where") > 0)              deltaID = (int) Math.round((double) myIds.size() / (double) numIntervalls);
                   tempQuery = query + " and " + tempID + ">='" + vec.firstElement() + "' and "+tempID + "<='" + vec.lastElement() + "' order by "+tempID;              ConversionProperties prop = getFieldNamesAndDestTableName(creates.get(tbIndex).toString(), query, names.get(tbIndex).toString());
                 else              StringBuffer insCommand = createInsertCommand(prop.destTableName, prop.fieldNames);
                   tempQuery = query + " where " + tempID + ">='" + vec.firstElement() + "' and "+tempID + "<='" + vec.lastElement() + "'";// order by "+tempID;              StringBuffer updCommand = createUpdateCommand(prop.destTableName, prop.fieldNames, tempIDdest);
                   System.out.println("tempQuery is now "+tempQuery+" order by "+tempID);              StringBuffer delCommand = createDeleteCommand(destTableName, tempIDdest);
           //  bean.makeQuery(tempQuery,vec.size());              PreparedStatement insPst = beanDest.getConnection().prepareStatement(insCommand.toString());
            Vector[] vectors=bean.getQueryData(tempQuery,vec.size());              PreparedStatement updPst = beanDest.getConnection().prepareStatement(updCommand.toString());
            int idIndex = vectors[1].indexOf(idField);              delPSt = beanDest.getConnection().prepareStatement(delCommand.toString());
            for (Iterator iter = vectors[0].iterator(); iter.hasNext();)              //    delPSt.setString(1,"b015892");
               //   delPSt.execute();
               //  if (true)
               //  return;
               if (vec.size() <= numIntervalls)
           {            {
             Vector line = (Vector) iter.next();                endIndex = 0;
             System.out.println("line "+linesToAppend.contains(line.get(idIndex)));                deltaID = vec.size();
           }            }
            System.out.println( );              for (int k = 0; k < vec.size() - deltaID; k = k + deltaID)
             // System.out.println("ID LIST SIZE " + Math.round((double) myIds.size() / (double) numIntervalls) + " " + myIdsDest.size());              {
             /// @TODO complete delete task remove query show lines to be deleted let user choose if he wants that                System.out.println(vec.get(k) + " " + vec.get(k + deltaID) + " " + vec.lastElement());
             System.out.println("number of lines to  be deleted " + linesToDelete.size());                if (query.indexOf("where") > 0)
             deltaID = (int) Math.round((double) myIds.size() / (double) numIntervalls);                  tempQuery = query + " and " + tempID + ">='" + vec.get(k) + "' and " + tempID + "<='" + vec.get(k + deltaID) + "'";
             System.out.println("deltaID "+deltaID);                else
             System.exit(0);                  tempQuery = query + " where " + tempID + ">='" + vec.get(k) + "' and " + tempID + "<='" + vec.get(k + deltaID) + "'";
                    System.out.println(tempQuery);
             beanDest.setConnection(destination);  
   
             Statement stm = beanDest.getConnection().createStatement();  
   
             Vector tables = beanDest.getTableNames();  
             // Collections.sort(tables);  
             System.out.println(names.get(tbIndex) + " " + tables.indexOf(convertText((String) names.get(tbIndex)))); // "//beanDest.getTypeNames());   
             tables = beanDest.getTableNames();  
             // System.out.println(beanDest.getTableNames(beanDest.getCatalogs().get(2).toString()));  
             stm = beanDest.getConnection().createStatement();  
   
             if (dialog != null)              if (dialog != null)
               dialog.title.setText(" Deleting table data ...");                  dialog.title.setText("Reading table data ...");
   
             int j = -1;  
   
             Vector row = null;                // bean.makeQuery(tempQuery, deltaID);
             command = new StringBuffer();                if (dialog != null)
                   dialog.title.setText("Writing table data ...");
   
             command.append("DELETE FROM");                performSynchronize(idField, vec, tempQuery, linesToDelete, linesToAppend, insPst, updPst, delPSt, deltaID, delimiter);
             command.append(beanDest.getQC());                // System.out.println("ID LIST SIZE " + Math.round((double) myIds.size() / (double) numIntervalls) + " " + myIdsDest.size());
             command.append(destTableName);                endIndex = k + deltaID;
             //command.append(convertText((String) names.get(tbIndex)));              }
             command.append(beanDest.getQC());              System.out.println(endIndex);
             int size = bean.getColumnNames().size();              //all data written ? if not write last chunk of data
             command.append("WHERE " + convertText(ids.get(tbIndex).toString()) + " =  ?");              if (endIndex == vec.size() - 1)
             PreparedStatement pstm = beanDest.getConnection().prepareStatement(command.toString());                System.out.println("fits");
             System.out.println(command + " " + tbIndex);              else
             //int rowCount = bean.getRowCount(query);  
             //        int idIndex = bean.getColumnNames().indexOf(ids.get(tbIndex));  
             while (true)  
             {              {
                 System.out.println(" last intervall from " + vec.get(endIndex) + " " + vec.lastElement());
   
               ++j;                if (query.indexOf("where") > 0)
               if (j == linesToDelete.size())                  tempQuery = query + " and " + tempID + ">='" + vec.get(endIndex) + "' and " + tempID + "<='" + vec.lastElement() + "'";
                 break;                else
               //print rows                  tempQuery = query + " where " + tempID + ">='" + vec.get(endIndex) + "' and " + tempID + "<='" + vec.lastElement() + "'";
               pstm.setString(1, linesToDelete.get(j).toString());                System.out.println(tempQuery);
               System.out.println(pstm.toString());  
               pstm.execute();  
               if (dialog != null)                if (dialog != null)
                 dialog.progress.setValue((int) (((double) (j + 1) / (double) rowCount) * 100.0));                  dialog.title.setText("Reading table data ...");
               command = null;                //    bean.makeQuery(tempQuery, 0);
                 if (dialog != null)
                   dialog.title.setText("Writing table data ...");
                 performSynchronize(idField, vec, tempQuery, linesToDelete, linesToAppend, insPst, updPst, delPSt, deltaID, delimiter);
                 // System.out.println("ID LIST SIZE " + Math.round((double) myIds.size() / (double) numIntervalls) + " " + myIdsDest.size());
             }              }
             // prepare new query for next chunk              // prepare new query for next chunk
             if (query.indexOf("where") > 0)              if (query.indexOf("where") > 0)
Line 2093  class Convert Line 2158  class Convert
             else              else
               tempQuery = query + " where " + tempID + ">'" + vec.lastElement() + "'";                tempQuery = query + " where " + tempID + ">'" + vec.lastElement() + "'";
   
           } //to outer while            }
             String tableName = names.get(tbIndex).toString();
             IndexList idList = (IndexList) indexList.get(0);
             System.out.println("found list " + idList);
             Statement stm = beanDest.getConnection().createStatement();
             Vector destTables = beanDest.getTableNames();
             beanDest.makeQuery(tempQueryDest,0);
             for (Iterator iter = idList.iterator(); iter.hasNext();)
             {
               String indexField = (String) iter.next();
               indexField = convertText(indexField);
               String indexName = destTableName + "_" + indexField;
               if (destTables.contains(indexName))
               {
                 stm.execute("DROP  INDEX "+destTableName+"_"+indexField);
               //  continue;
               }
   
               String type = beanDest.getColumnType(indexField).toLowerCase();
              // System.out.println(indexField+" "+type+" "+(type.indexOf("text") >= 0 || type.indexOf("varchar") >= 0 || type.indexOf("char") >= 0));
               if (type.indexOf("text") >= 0 || type.indexOf("varchar") >= 0 || type.indexOf("char") >= 0)
                stm.execute("CREATE  INDEX " + indexName + " ON " + destTableName + "(LOWER(" + indexField + "))");
               else
                 stm.execute("CREATE  INDEX " + destTableName + "_" + indexField + " ON " + destTableName + "(" + indexField + ")");
   
                // stm.execute("DROP  INDEX "+destTableName+"_"+indexField);
   
             }
             //  CREATE UNIQUE INDEX title_idx ON films (title);  
             for (Iterator iter = linesToDelete.iterator(); iter.hasNext();)
             {
               String id = (String) iter.next();
               delPSt.setString(1, id);
               delPSt.execute();
   
             }
   
             long endTime = System.currentTimeMillis();
             System.out.println("Time for incremental synchronize  elapsed " + (endTime - startTime));
         } // to idfield if            } // to idfield if  
       } // table loop        } // table loop
   
     } catch (Exception e)      } catch (Exception e)
     {      {
       System.out.println("Error while connecting to database " + e);        System.out.println("Error while connecting to database " + e);
         e.printStackTrace();
       if (dialog != null)        if (dialog != null)
       {        {
         dialog.setVisible(false);          dialog.setVisible(false);
Line 2120  class Convert Line 2224  class Convert
   
       dialog.setVisible(false);        dialog.setVisible(false);
     }      }
   } // to method    }
     private static void performSynchronize(
       String idField,
       Vector vec,
       String tempQuery,
       TreeSet linesToDelete,
       TreeSet linesToAppend,
       PreparedStatement insPst,
       PreparedStatement updPst,
       PreparedStatement delPSt,
       int deltaID,
       String delimiter)
       throws SQLException, ParseException
     {
       Vector[] vectors = bean.getQueryData(tempQuery, deltaID);
       int idIndex = vectors[1].indexOf(idField);
       // todo arraylist code has to be added
       for (Iterator iter = vectors[0].iterator(); iter.hasNext();)
       {
         Vector line = (Vector) iter.next();
         Object lineIDIndex = line.get(idIndex);
         if (linesToAppend.contains(lineIDIndex))
           System.out.println("line " + linesToAppend.contains(line.get(idIndex)) + " " + lineIDIndex);
         if (linesToAppend.contains(lineIDIndex))
         {
           for (int l = 0; l < line.size(); ++l)
           {
             Object obj = line.get(l);
             if (obj instanceof ArrayList)
               obj = formatFileMakerArray((List) obj, delimiter);
             if (obj != null)
               insPst.setString(l + 1, obj.toString());
             else
               insPst.setNull(l + 1, Types.NULL);
           }
           insPst.execute();
   
         } else // update
           {
           for (int l = 0; l < line.size(); ++l)
           {
             Object obj = line.get(l);
             if (obj instanceof ArrayList)
               obj = formatFileMakerArray((List) obj, delimiter);
             if (obj != null)
               updPst.setString(l + 1, obj.toString());
             else
               updPst.setNull(l + 1, Types.NULL);
           }
           updPst.setString(line.size() + 1, line.get(idIndex).toString());
           updPst.execute();
       
         }
       }
   
     } // to method
     
   /**    /**
    * Converts input String in norman encoding to unicode      * Converts input String in norman encoding to unicode 
    * @param inp     * @param inp
    * @return converted String     * @return converted String
    */     */
   static public String normanToUnicode(String inp) {    static public String normanToUnicode(String inp)
     {
     StringBuffer buf = new StringBuffer();      StringBuffer buf = new StringBuffer();
     for (int i = 0; i < inp.length(); i++) {      for (int i = 0; i < inp.length(); i++)
       {
       char c = inp.charAt(i);        char c = inp.charAt(i);
      // System.out.println("char "+c+" "+(int)c);       // System.out.println("char "+c+" "+(int)c);
       switch (c) {        switch (c)
       case 1: buf.append("\u00d0"); break; // Eth        {
       case 2: buf.append("\u00f0"); break; // eth          case 1 :
       case 3: buf.append("\u0141"); break; // Lslash            buf.append("\u00d0");
       case 4: buf.append("\u0142"); break; // lslash            break; // Eth
       case 5: buf.append("\u0160"); break; // S caron          case 2 :
       case 6: buf.append("\u0161"); break; // s caron            buf.append("\u00f0");
       case 7: buf.append("\u00dd"); break; // Y acute            break; // eth
       case 8: buf.append("\u00fd"); break; // y acute          case 3 :
       case 11: buf.append("\u00de"); break; // Thorn            buf.append("\u0141");
       case 12: buf.append("\u00fe"); break; // thorn            break; // Lslash
       case 14: buf.append("\u017d"); break; // Z caron          case 4 :
       case 15: buf.append("\u017e"); break; // z caron            buf.append("\u0142");
       case 17: buf.append("\u0073"); break; // asciitilde            break; // lslash
       case 18: buf.append("j\u0305"); break; // j macron [does a single char exist?]          case 5 :
       case 19: buf.append("^"); break; // circumflex            buf.append("\u0160");
       case 20: buf.append("\u0303"); break; // tilde            break; // S caron
       case 21: buf.append("\u00bd"); break; // onehalf          case 6 :
       case 22: buf.append("\u00bc"); break; // onequarter            buf.append("\u0161");
       case 23: buf.append("\u00b9"); break; // onesuperior            break; // s caron
       case 24: buf.append("\u00be"); break; // threequarters          case 7 :
       case 25: buf.append("\u00b3"); break; // threesuperior            buf.append("\u00dd");
       case 26: buf.append("\u00b2"); break; // twosuperior            break; // Y acute
       case 27: buf.append("\u00a6"); break; // brokenbar          case 8 :
       case 28: buf.append("-"); break; // minus            buf.append("\u00fd");
       case 29: buf.append("\u00d7"); break; // multiply            break; // y acute
       case 39: buf.append("'"); break; // quotesingle          case 11 :
       case 94: buf.append("\u0302"); break; // circumflex            buf.append("\u00de");
       case 96: buf.append("\u0300"); break; // grave            break; // Thorn
       case 196: buf.append("\u00c4"); break; // A dieresis          case 12 :
       case 197: buf.append("\u00c5"); break; // A ring            buf.append("\u00fe");
       case 201: buf.append("\u00c9"); break; // E acute            break; // thorn
       case 209: buf.append("\u00d1"); break; // N tilde          case 14 :
       case 214: buf.append("\u00d6"); break; // O dieresis            buf.append("\u017d");
       case 220: buf.append("\u00dc"); break; // U dieresis            break; // Z caron
       case 225: buf.append("\u00e1"); break; // a acute          case 15 :
       case 224: buf.append("\u00e0"); break; // a grave            buf.append("\u017e");
       case 226: buf.append("\u00e2"); break; // a circumflex            break; // z caron
       case 228: buf.append("\u00e4"); break; // a dieresis          case 17 :
       case 227: buf.append("\u00e3"); break; // a tilde            buf.append("\u0073");
       case 229: buf.append("\u0101"); break; // a macron            break; // asciitilde
       case 231: buf.append("\u00e7"); break; // c cedilla          case 18 :
       case 233: buf.append("\u00e9"); break; // e acute            buf.append("j\u0305");
       case 232: buf.append("\u00e8"); break; // e grave            break; // j macron [does a single char exist?]
       case 234: buf.append("\u00ea"); break; // e circumflex          case 19 :
       case 235: buf.append("\u00eb"); break; // e dieresis            buf.append("^");
       case 237: buf.append("\u00ed"); break; // i acute            break; // circumflex
       case 236: buf.append("\u00ec"); break; // i grave          case 20 :
       case 238: buf.append("\u00ee"); break; // i circumflex            buf.append("\u0303");
       case 239: buf.append("\u00ef"); break; // i dieresis            break; // tilde
       case 241: buf.append("\u00f1"); break; // n tilde          case 21 :
       case 243: buf.append("\u00f3"); break; // o acute            buf.append("\u00bd");
       case 242: buf.append("\u00f2"); break; // o grave            break; // onehalf
       case 244: buf.append("\u00f4"); break; // o circumflex          case 22 :
       case 246: buf.append("\u00f6"); break; // o dieresis            buf.append("\u00bc");
       case 245: buf.append("\u00f5"); break; // o tilde            break; // onequarter
       case 250: buf.append("\u00fa"); break; // u acute          case 23 :
       case 249: buf.append("\u00f9"); break; // u grave            buf.append("\u00b9");
       case 251: buf.append("\u00fb"); break; // u circumflex            break; // onesuperior
       case 252: buf.append("\u00fc"); break; // u dieresis          case 24 :
       case 8224: buf.append("\u1e6d"); break; // t underdot            buf.append("\u00be");
       case 176: buf.append("\u00b0"); break; // degree            break; // threequarters
       case 162: buf.append("\u1ebd"); break; // e tilde          case 25 :
       case 163: buf.append("\u00a3"); break; // sterling            buf.append("\u00b3");
       case 167: buf.append("\u00a7"); break; // section            break; // threesuperior
       case 182: buf.append("\u00b6"); break; // paragraph          case 26 :
       case 223: buf.append("\u015b"); break; // s acute            buf.append("\u00b2");
       case 174: buf.append("\u1e5b"); break; // r underdot            break; // twosuperior
       case 169: buf.append("\u1e45"); break; // n overdot          case 27 :
       case 353: buf.append("\u1e45"); break; // n overdot            buf.append("\u00a6");
       case 180: buf.append("\u0301"); break; // acute            break; // brokenbar
       case 168: buf.append("\u0308"); break; // dieresis          case 28 :
       case 8800: buf.append("\u1e6d"); break; // t underdot            buf.append("-");
       case 198: buf.append("\u00c6"); break; // AE            break; // minus
       case 216: buf.append("\u014d"); break; // o macron          case 29 :
       case 8734: buf.append("\u0129"); break; // i tilde            buf.append("\u00d7");
       case 177: buf.append("\u00b1"); break; // plusminus            break; // multiply
       case 165: buf.append("\u012b"); break; // i macron          case 39 :
       case 181: buf.append("\u1e43"); break; // m underdot            buf.append("'");
       case 8706: buf.append("\u1e0d"); break; // d underdot            break; // quotesingle
       case 240: buf.append("\u1e0d"); break; // d underdot          case 94 :
             buf.append("\u0302");
       case 8721: buf.append("\u1e63"); break; // s underdot            break; // circumflex
       case 960: buf.append("\u017a"); break; // z acute          case 96 :
       case 8747: buf.append("\u1e45"); break; // n overdot            buf.append("\u0300");
       case 937: buf.append("\u0169"); break; // u tilde            break; // grave
       case 230: buf.append("\u00e6"); break; // ae          case 196 :
       case 248: buf.append("\u00f8"); break; // oslash            buf.append("\u00c4");
       case 191: buf.append("\u0304\u0306"); break; // macron breve            break; // A dieresis
       case 172: buf.append("\u1e37"); break; //           case 197 :
       case 8730: buf.append("j\u0305"); break; // j macron [does a single char exist?]            buf.append("\u00c5");
       case 402: buf.append("\u0103"); break; // a breve            break; // A ring
       case 8776: buf.append("\u016d"); break; // u breve          case 201 :
       case 187: buf.append("\u1e42"); break; // M underdot            buf.append("\u00c9");
       case 8230: buf.append("\u2026"); break; // ellipsis            break; // E acute
       case 192: buf.append("\u00c0"); break; // A grave          case 209 :
       case 195: buf.append("\u00c3"); break; // A tilde            buf.append("\u00d1");
       case 213: buf.append("\u00d5"); break; // O tilde            break; // N tilde
       case 338: buf.append("m\u0306"); break; // m breve          case 214 :
       case 339: buf.append("\u0153"); break; // oe            buf.append("\u00d6");
       case 8211: buf.append("\u2013"); break; // endash            break; // O dieresis
       case 8212: buf.append("\u2014"); break; // emdash          case 220 :
       case 8220: buf.append("\u201c"); break; // quotedblleft            buf.append("\u00dc");
       case 8221: buf.append("\u201d"); break; // quotedblright            break; // U dieresis
       case 8216: buf.append("\u2018"); break; // quoteleft          case 225 :
       case 8217: buf.append("\u2019"); break; // quoteright            buf.append("\u00e1");
       case 247: buf.append("\u1e37"); break; // l underring [actually underdot]            break; // a acute
       case 9674: buf.append("\u1e41"); break; // m overdot          case 224 :
       case 255: buf.append("n\u0306"); break; // n breve            buf.append("\u00e0");
       case 376: buf.append("\u00d7"); break; // multiply            break; // a grave
       case 8364: buf.append("\u1e5b"); break; // r underring [actually underdot]          case 226 :
       case 8249: buf.append("\u1e44"); break; // N overdot            buf.append("\u00e2");
       case 8250: buf.append("\u1e62"); break; // S underdot            break; // a circumflex
       case 64257: buf.append("\u1e24"); break; // H underdot          case 228 :
       case 64258: buf.append("\u1e0c"); break; // D underdot            buf.append("\u00e4");
       case 8225: buf.append("\u2021"); break; // daggerdbl            break; // a dieresis
       case 8218: buf.append("\u1e36"); break; // L underdot          case 227 :
       case 8222: buf.append("\u0113"); break; // e macron            buf.append("\u00e3");
       case 194: buf.append("\u1e5f"); break; // r underbar            break; // a tilde
       case 202: buf.append("r\u0324"); break; // r underdieresis          case 229 :
       case 193: buf.append("\u012a"); break; // I macron            buf.append("\u0101");
             break; // a macron
           case 231 :
             buf.append("\u00e7");
             break; // c cedilla
           case 233 :
             buf.append("\u00e9");
             break; // e acute
           case 232 :
             buf.append("\u00e8");
             break; // e grave
           case 234 :
             buf.append("\u00ea");
             break; // e circumflex
           case 235 :
             buf.append("\u00eb");
             break; // e dieresis
           case 237 :
             buf.append("\u00ed");
             break; // i acute
           case 236 :
             buf.append("\u00ec");
             break; // i grave
           case 238 :
             buf.append("\u00ee");
             break; // i circumflex
           case 239 :
             buf.append("\u00ef");
             break; // i dieresis
           case 241 :
             buf.append("\u00f1");
             break; // n tilde
           case 243 :
             buf.append("\u00f3");
             break; // o acute
           case 242 :
             buf.append("\u00f2");
             break; // o grave
           case 244 :
             buf.append("\u00f4");
             break; // o circumflex
           case 246 :
             buf.append("\u00f6");
             break; // o dieresis
           case 245 :
             buf.append("\u00f5");
             break; // o tilde
           case 250 :
             buf.append("\u00fa");
             break; // u acute
           case 249 :
             buf.append("\u00f9");
             break; // u grave
           case 251 :
             buf.append("\u00fb");
             break; // u circumflex
           case 252 :
             buf.append("\u00fc");
             break; // u dieresis
           case 8224 :
             buf.append("\u1e6d");
             break; // t underdot
           case 176 :
             buf.append("\u00b0");
             break; // degree
           case 162 :
             buf.append("\u1ebd");
             break; // e tilde
           case 163 :
             buf.append("\u00a3");
             break; // sterling
           case 167 :
             buf.append("\u00a7");
             break; // section
           case 182 :
             buf.append("\u00b6");
             break; // paragraph
           case 223 :
             buf.append("\u015b");
             break; // s acute
           case 174 :
             buf.append("\u1e5b");
             break; // r underdot
           case 169 :
             buf.append("\u1e45");
             break; // n overdot
           case 353 :
             buf.append("\u1e45");
             break; // n overdot
           case 180 :
             buf.append("\u0301");
             break; // acute
           case 168 :
             buf.append("\u0308");
             break; // dieresis
           case 8800 :
             buf.append("\u1e6d");
             break; // t underdot
           case 198 :
             buf.append("\u00c6");
             break; // AE
           case 216 :
             buf.append("\u014d");
             break; // o macron
           case 8734 :
             buf.append("\u0129");
             break; // i tilde
           case 177 :
             buf.append("\u00b1");
             break; // plusminus
           case 165 :
             buf.append("\u012b");
             break; // i macron
           case 181 :
             buf.append("\u1e43");
             break; // m underdot
           case 8706 :
             buf.append("\u1e0d");
             break; // d underdot
           case 240 :
             buf.append("\u1e0d");
             break; // d underdot
   
           case 8721 :
             buf.append("\u1e63");
             break; // s underdot
           case 960 :
             buf.append("\u017a");
             break; // z acute
           case 8747 :
             buf.append("\u1e45");
             break; // n overdot
           case 937 :
             buf.append("\u0169");
             break; // u tilde
           case 230 :
             buf.append("\u00e6");
             break; // ae
           case 248 :
             buf.append("\u00f8");
             break; // oslash
           case 191 :
             buf.append("\u0304\u0306");
             break; // macron breve
           case 172 :
             buf.append("\u1e37");
             break; // 
           case 8730 :
             buf.append("j\u0305");
             break; // j macron [does a single char exist?]
           case 402 :
             buf.append("\u0103");
             break; // a breve
           case 8776 :
             buf.append("\u016d");
             break; // u breve
           case 187 :
             buf.append("\u1e42");
             break; // M underdot
           case 8230 :
             buf.append("\u2026");
             break; // ellipsis
           case 192 :
             buf.append("\u00c0");
             break; // A grave
           case 195 :
             buf.append("\u00c3");
             break; // A tilde
           case 213 :
             buf.append("\u00d5");
             break; // O tilde
           case 338 :
             buf.append("m\u0306");
             break; // m breve
           case 339 :
             buf.append("\u0153");
             break; // oe
           case 8211 :
             buf.append("\u2013");
             break; // endash
           case 8212 :
             buf.append("\u2014");
             break; // emdash
           case 8220 :
             buf.append("\u201c");
             break; // quotedblleft
           case 8221 :
             buf.append("\u201d");
             break; // quotedblright
           case 8216 :
             buf.append("\u2018");
             break; // quoteleft
           case 8217 :
             buf.append("\u2019");
             break; // quoteright
           case 247 :
             buf.append("\u1e37");
             break; // l underring [actually underdot]
           case 9674 :
             buf.append("\u1e41");
             break; // m overdot
           case 255 :
             buf.append("n\u0306");
             break; // n breve
           case 376 :
             buf.append("\u00d7");
             break; // multiply
           case 8364 :
             buf.append("\u1e5b");
             break; // r underring [actually underdot]
           case 8249 :
             buf.append("\u1e44");
             break; // N overdot
           case 8250 :
             buf.append("\u1e62");
             break; // S underdot
           case 64257 :
             buf.append("\u1e24");
             break; // H underdot
           case 64258 :
             buf.append("\u1e0c");
             break; // D underdot
           case 8225 :
             buf.append("\u2021");
             break; // daggerdbl
           case 8218 :
             buf.append("\u1e36");
             break; // L underdot
           case 8222 :
             buf.append("\u0113");
             break; // e macron
           case 194 :
             buf.append("\u1e5f");
             break; // r underbar
           case 202 :
             buf.append("r\u0324");
             break; // r underdieresis
           case 193 :
             buf.append("\u012a");
             break; // I macron
       case 8486:        case 8486:
       case 203: buf.append("\u016b"); break; // u macron          case 203 :
       case 200: buf.append("\u1e6c"); break; // T underdot            buf.append("\u016b");
       case 205: buf.append("\u1e64"); break; // S acute            break; // u macron
       case 206: buf.append("\u2020"); break; // dagger          case 200 :
       case 207: buf.append("\u0115"); break; // e breve            buf.append("\u1e6c");
       case 204: buf.append("\u014f"); break; // o breve            break; // T underdot
       case 211: buf.append("\u0100"); break; // A macron          case 205 :
       case 212: buf.append("\u1e46"); break; // N underdot            buf.append("\u1e64");
       case 210: buf.append("\u1e3b"); break; // l underbar            break; // S acute
       case 218: buf.append("\u016a"); break; // U macron          case 206 :
       case 219: buf.append("\u0179"); break; // Z acute            buf.append("\u2020");
       case 217: buf.append("\u1e5a"); break; // R underdot            break; // dagger
       case 305: buf.append("\u0131"); break; // dotlessi          case 207 :
       case 710: buf.append("\u1e47"); break; // n underdot            buf.append("\u0115");
       case 732: buf.append("\u1e49"); break; // n underbar            break; // e breve
       case 175: buf.append("\u0304"); break; // macron          case 204 :
       case 728: buf.append("\u0306"); break; // breve            buf.append("\u014f");
       case 729:case 215: buf.append("\u1e25"); break; // h underdot            break; // o breve
       case 730: buf.append("\u012d"); break; // i breve          case 211 :
       case 184: buf.append("\u0327"); break; // cedilla            buf.append("\u0100");
       case 733: buf.append("\u030b"); break; // hungarumlaut            break; // A macron
       case 731: buf.append("\u0328"); break; // ogonek          case 212 :
       case 711: buf.append("\u030c"); break; // caron            buf.append("\u1e46");
       case 199: buf.append("\u012b\u0303"); break; // imacron tilde            break; // N underdot
       case 8226: buf.append("\u1e5d"); break; // runderdot macron          case 210 :
       case 8482: buf.append("\u016b\0306"); break; // umacron breve            buf.append("\u1e3b");
       case 8804: buf.append("\u0101\u0301"); break; // amacron acute            break; // l underbar
       case 8805: buf.append("\u016b\u0301"); break; // umacron acute          case 218 :
       case 8719: buf.append("\u0113\u0301"); break; // emacron acute            buf.append("\u016a");
       case 170: buf.append("\u0113\u0300"); break; // emacron breve            break; // U macron
       case 186: buf.append("\u014d\u0300"); break; // omacron breve          case 219 :
       case 161: buf.append("\u0101\u0306"); break; // amacron breve            buf.append("\u0179");
       case 8710: buf.append("\u0101\u0303"); break; // amacron tilde            break; // Z acute
       case 171: buf.append("\u012b\u0301"); break; // imacron acute          case 217 :
       case 8260: buf.append("\u1e00"); break; // runderdotmacron acute            buf.append("\u1e5a");
       case 183: buf.append("\u1e5b\u0301"); break; // runderdot acute            break; // R underdot
       case 8240: buf.append("\u012b\u0306"); break; // imacron breve          case 305 :
       case 63743: buf.append("\u016b\u0303"); break; // umacron tilde            buf.append("\u0131");
       default: buf.append(c);                break; // dotlessi
           case 710 :
             buf.append("\u1e47");
             break; // n underdot
           case 732 :
             buf.append("\u1e49");
             break; // n underbar
           case 175 :
             buf.append("\u0304");
             break; // macron
           case 728 :
             buf.append("\u0306");
             break; // breve
           case 729 :
           case 215 :
             buf.append("\u1e25");
             break; // h underdot
           case 730 :
             buf.append("\u012d");
             break; // i breve
           case 184 :
             buf.append("\u0327");
             break; // cedilla
           case 733 :
             buf.append("\u030b");
             break; // hungarumlaut
           case 731 :
             buf.append("\u0328");
             break; // ogonek
           case 711 :
             buf.append("\u030c");
             break; // caron
           case 199 :
             buf.append("\u012b\u0303");
             break; // imacron tilde
           case 8226 :
             buf.append("\u1e5d");
             break; // runderdot macron
           case 8482 :
             buf.append("\u016b\0306");
             break; // umacron breve
           case 8804 :
             buf.append("\u0101\u0301");
             break; // amacron acute
           case 8805 :
             buf.append("\u016b\u0301");
             break; // umacron acute
           case 8719 :
             buf.append("\u0113\u0301");
             break; // emacron acute
           case 170 :
             buf.append("\u0113\u0300");
             break; // emacron breve
           case 186 :
             buf.append("\u014d\u0300");
             break; // omacron breve
           case 161 :
             buf.append("\u0101\u0306");
             break; // amacron breve
           case 8710 :
             buf.append("\u0101\u0303");
             break; // amacron tilde
           case 171 :
             buf.append("\u012b\u0301");
             break; // imacron acute
           case 8260 :
             buf.append("\u1e00");
             break; // runderdotmacron acute
           case 183 :
             buf.append("\u1e5b\u0301");
             break; // runderdot acute
           case 8240 :
             buf.append("\u012b\u0306");
             break; // imacron breve
           case 63743 :
             buf.append("\u016b\u0303");
             break; // umacron tilde
           default :
             buf.append(c);
        if((int)c>127)         if((int)c>127)
        System.out.println("char "+c+" "+(int)c);         System.out.println("char "+c+" "+(int)c);
        break;         break;
Line 2303  class Convert Line 2779  class Convert
     return buf.toString();      return buf.toString();
   }    }
   
   static public String normanToUnicodeOld(String inp) {    static public String normanToUnicodeOld(String inp)
     {
     StringBuffer buf = new StringBuffer();      StringBuffer buf = new StringBuffer();
     for (int i = 0; i < inp.length(); i++) {      for (int i = 0; i < inp.length(); i++)
       {
       char c = inp.charAt(i);        char c = inp.charAt(i);
       switch (c) {        switch (c)
       case 1: buf.append("\u00d0"); break; // Eth        {
       case 2: buf.append("\u00f0"); break; // eth          case 1 :
       case 3: buf.append("\u0141"); break; // Lslash            buf.append("\u00d0");
       case 4: buf.append("\u0142"); break; // lslash            break; // Eth
       case 5: buf.append("\u0160"); break; // S caron          case 2 :
       case 6: buf.append("\u0161"); break; // s caron            buf.append("\u00f0");
       case 7: buf.append("\u00dd"); break; // Y acute            break; // eth
       case 8: buf.append("\u00fd"); break; // y acute          case 3 :
       case 11: buf.append("\u00de"); break; // Thorn            buf.append("\u0141");
       case 12: buf.append("\u00fe"); break; // thorn            break; // Lslash
       case 14: buf.append("\u017d"); break; // Z caron          case 4 :
       case 15: buf.append("\u017e"); break; // z caron            buf.append("\u0142");
       case 17: buf.append("\u0073"); break; // asciitilde            break; // lslash
       case 18: buf.append("j\u0305"); break; // j macron [does a single char exist?]          case 5 :
       case 19: buf.append("^"); break; // circumflex            buf.append("\u0160");
       case 20: buf.append("\u0303"); break; // tilde            break; // S caron
       case 21: buf.append("\u00bd"); break; // onehalf          case 6 :
       case 22: buf.append("\u00bc"); break; // onequarter            buf.append("\u0161");
       case 23: buf.append("\u00b9"); break; // onesuperior            break; // s caron
       case 24: buf.append("\u00be"); break; // threequarters          case 7 :
       case 25: buf.append("\u00b3"); break; // threesuperior            buf.append("\u00dd");
       case 26: buf.append("\u00b2"); break; // twosuperior            break; // Y acute
       case 27: buf.append("\u00a6"); break; // brokenbar          case 8 :
       case 28: buf.append("-"); break; // minus            buf.append("\u00fd");
       case 29: buf.append("\u00d7"); break; // multiply            break; // y acute
       case 39: buf.append("'"); break; // quotesingle          case 11 :
       case 94: buf.append("\u0302"); break; // circumflex            buf.append("\u00de");
       case 96: buf.append("\u0300"); break; // grave            break; // Thorn
       case 128: buf.append("\u00c4"); break; // A dieresis          case 12 :
       case 129: buf.append("\u00c5"); break; // A ring            buf.append("\u00fe");
       case 131: buf.append("\u00c9"); break; // E acute            break; // thorn
       case 132: buf.append("\u00d1"); break; // N tilde          case 14 :
       case 133: buf.append("\u00d6"); break; // O dieresis            buf.append("\u017d");
       case 134: buf.append("\u00dc"); break; // U dieresis            break; // Z caron
       case 135: buf.append("\u00e1"); break; // a acute          case 15 :
       case 136: buf.append("\u00e0"); break; // a grave            buf.append("\u017e");
       case 137: buf.append("\u00e2"); break; // a circumflex            break; // z caron
       case 138: buf.append("\u00e4"); break; // a dieresis          case 17 :
       case 139: buf.append("\u00e3"); break; // a tilde            buf.append("\u0073");
       case 140: buf.append("\u0101"); break; // a macron            break; // asciitilde
       case 141: buf.append("\u00e7"); break; // c cedilla          case 18 :
       case 142: buf.append("\u00e9"); break; // e acute            buf.append("j\u0305");
       case 143: buf.append("\u00e8"); break; // e grave            break; // j macron [does a single char exist?]
       case 144: buf.append("\u00ea"); break; // e circumflex          case 19 :
       case 145: buf.append("\u00eb"); break; // e dieresis            buf.append("^");
       case 146: buf.append("\u00ed"); break; // i acute            break; // circumflex
       case 147: buf.append("\u00ec"); break; // i grave          case 20 :
       case 148: buf.append("\u00ee"); break; // i circumflex            buf.append("\u0303");
       case 149: buf.append("\u00ef"); break; // i dieresis            break; // tilde
       case 150: buf.append("\u00f1"); break; // n tilde          case 21 :
       case 151: buf.append("\u00f3"); break; // o acute            buf.append("\u00bd");
       case 152: buf.append("\u00f2"); break; // o grave            break; // onehalf
       case 153: buf.append("\u00f4"); break; // o circumflex          case 22 :
       case 154: buf.append("\u00f6"); break; // o dieresis            buf.append("\u00bc");
       case 155: buf.append("\u00f5"); break; // o tilde            break; // onequarter
       case 156: buf.append("\u00fa"); break; // u acute          case 23 :
       case 157: buf.append("\u00f9"); break; // u grave            buf.append("\u00b9");
       case 158: buf.append("\u00fb"); break; // u circumflex            break; // onesuperior
       case 159: buf.append("\u00fc"); break; // u dieresis          case 24 :
       case 160: buf.append("\u1e6d"); break; // t underdot            buf.append("\u00be");
       case 161: buf.append("\u00b0"); break; // degree            break; // threequarters
       case 162: buf.append("\u1ebd"); break; // e tilde          case 25 :
       case 163: buf.append("\u00a3"); break; // sterling            buf.append("\u00b3");
       case 164: buf.append("\u00a7"); break; // section            break; // threesuperior
       case 166: buf.append("\u00b6"); break; // paragraph          case 26 :
       case 167: buf.append("\u015b"); break; // s acute            buf.append("\u00b2");
       case 168: buf.append("\u1e5b"); break; // r underdot            break; // twosuperior
       case 169: buf.append("\u1e67"); break; // s caron          case 27 :
       case 171: buf.append("\u0301"); break; // acute            buf.append("\u00a6");
       case 172: buf.append("\u0308"); break; // dieresis            break; // brokenbar
       case 173: buf.append("\u1e6d"); break; // t underdot          case 28 :
       case 174: buf.append("\u00c6"); break; // AE            buf.append("-");
       case 175: buf.append("\u014d"); break; // o macron            break; // minus
       case 176: buf.append("\u0129"); break; // i tilde          case 29 :
       case 177: buf.append("\u00b1"); break; // plusminus            buf.append("\u00d7");
       case 180: buf.append("\u012b"); break; // i macron            break; // multiply
       case 181: buf.append("\u1e43"); break; // m underdot          case 39 :
       case 182: buf.append("\u1e0d"); break; // d underdot            buf.append("'");
       case 183: buf.append("\u1e63"); break; // s underdot            break; // quotesingle
       case 185: buf.append("\u017a"); break; // z acute          case 94 :
       case 186: buf.append("\u1e45"); break; // n overdot            buf.append("\u0302");
       case 189: buf.append("\u0169"); break; // u tilde            break; // circumflex
       case 190: buf.append("\u00e6"); break; // ae          case 96 :
       case 191: buf.append("\u00f8"); break; // oslash            buf.append("\u0300");
       case 192: buf.append("\u0304\u0306"); break; // macron breve            break; // grave
       case 194: buf.append("\u1e37"); break; //           case 128 :
       case 195: buf.append("j\u0305"); break; // j macron [does a single char exist?]            buf.append("\u00c4");
       case 196: buf.append("\u0103"); break; // a breve            break; // A dieresis
       case 197: buf.append("\u016d"); break; // u breve          case 129 :
       case 200: buf.append("\u1e42"); break; // M underdot            buf.append("\u00c5");
       case 201: buf.append("\u2026"); break; // ellipsis            break; // A ring
       case 203: buf.append("\u00c0"); break; // A grave          case 131 :
       case 204: buf.append("\u00c3"); break; // A tilde            buf.append("\u00c9");
       case 205: buf.append("\u00d5"); break; // O tilde            break; // E acute
       case 206: buf.append("m\u0306"); break; // m breve          case 132 :
       case 207: buf.append("\u0153"); break; // oe            buf.append("\u00d1");
       case 208: buf.append("\u2013"); break; // endash            break; // N tilde
       case 209: buf.append("\u2014"); break; // emdash          case 133 :
       case 210: buf.append("\u201c"); break; // quotedblleft            buf.append("\u00d6");
       case 211: buf.append("\u201d"); break; // quotedblright            break; // O dieresis
       case 212: buf.append("\u2018"); break; // quoteleft          case 134 :
       case 213: buf.append("\u2019"); break; // quoteright            buf.append("\u00dc");
       case 214: buf.append("\u1e37"); break; // l underring [actually underdot]            break; // U dieresis
       case 215: buf.append("\u1e41"); break; // m overdot          case 135 :
       case 216: buf.append("n\u0306"); break; // n breve            buf.append("\u00e1");
       case 217: buf.append("\u00d7"); break; // multiply            break; // a acute
       case 219: buf.append("\u1e5b"); break; // r underring [actually underdot]          case 136 :
       case 220: buf.append("\u1e44"); break; // N overdot            buf.append("\u00e0");
       case 221: buf.append("\u1e62"); break; // S underdot            break; // a grave
       case 222: buf.append("\u1e24"); break; // H underdot          case 137 :
       case 223: buf.append("\u1e0c"); break; // D underdot            buf.append("\u00e2");
       case 224: buf.append("\u2021"); break; // daggerdbl            break; // a circumflex
       case 226: buf.append("\u1e36"); break; // L underdot          case 138 :
       case 227: buf.append("\u0113"); break; // e macron            buf.append("\u00e4");
       case 229: buf.append("\u1e5f"); break; // r underbar            break; // a dieresis
       case 230: buf.append("r\u0324"); break; // r underdieresis          case 139 :
       case 231: buf.append("\u012a"); break; // I macron            buf.append("\u00e3");
       case 232: buf.append("\u016b"); break; // u macron            break; // a tilde
       case 233: buf.append("\u01e6c"); break; // T underdot          case 140 :
       case 234: buf.append("\u1e64"); break; // S acute            buf.append("\u0101");
       case 235: buf.append("\u2020"); break; // dagger            break; // a macron
       case 236: buf.append("\u0115"); break; // e breve          case 141 :
       case 237: buf.append("\u014f"); break; // o breve            buf.append("\u00e7");
       case 238: buf.append("\u0100"); break; // A macron            break; // c cedilla
       case 239: buf.append("\u1e46"); break; // N underdot          case 142 :
       case 241: buf.append("\u1e3b"); break; // l underbar            buf.append("\u00e9");
       case 242: buf.append("\u016a"); break; // U macron            break; // e acute
       case 243: buf.append("\u0179"); break; // Z acute          case 143 :
       case 244: buf.append("\u1e5a"); break; // R underdot            buf.append("\u00e8");
       case 245: buf.append("\u0131"); break; // dotlessi            break; // e grave
       case 246: buf.append("\u1e47"); break; // n underdot          case 144 :
       case 247: buf.append("\u1e49"); break; // n underbar            buf.append("\u00ea");
       case 248: buf.append("\u0304"); break; // macron            break; // e circumflex
       case 249: buf.append("\u0306"); break; // breve          case 145 :
       case 250: buf.append("\u1e25"); break; // h underdot            buf.append("\u00eb");
       case 251: buf.append("\u012d"); break; // i breve            break; // e dieresis
       case 252: buf.append("\u0327"); break; // cedilla          case 146 :
       case 253: buf.append("\u030b"); break; // hungarumlaut            buf.append("\u00ed");
       case 254: buf.append("\u0328"); break; // ogonek            break; // i acute
       case 255: buf.append("\u030c"); break; // caron          case 147 :
       case 130: buf.append("\u012b\u0303"); break; // imacron tilde            buf.append("\u00ec");
       case 165: buf.append("\u1e5d"); break; // runderdot macron            break; // i grave
       case 170: buf.append("\u016b\0306"); break; // umacron breve          case 148 :
       case 178: buf.append("\u0101\u0301"); break; // amacron acute            buf.append("\u00ee");
       case 179: buf.append("\u016b\u0301"); break; // umacron acute            break; // i circumflex
       case 184: buf.append("\u0113\u0301"); break; // emacron acute          case 149 :
       case 187: buf.append("\u0113\u0300"); break; // emacron breve            buf.append("\u00ef");
       case 188: buf.append("\u014d\u0300"); break; // omacron breve            break; // i dieresis
       case 193: buf.append("\u0101\u0306"); break; // amacron breve          case 150 :
       case 198: buf.append("\u0101\u0303"); break; // amacron tilde            buf.append("\u00f1");
       case 199: buf.append("\u012b\u0301"); break; // imacron acute            break; // n tilde
       case 218: buf.append("\u1e00"); break; // runderdotmacron acute          case 151 :
       case 225: buf.append("\u1e5b\u0301"); break; // runderdot acute            buf.append("\u00f3");
       case 228: buf.append("\u012b\u0306"); break; // imacron breve            break; // o acute
       case 240: buf.append("\u016b\u0303"); break; // umacron tilde          case 152 :
       default: buf.append(c); break;            buf.append("\u00f2");
             break; // o grave
           case 153 :
             buf.append("\u00f4");
             break; // o circumflex
           case 154 :
             buf.append("\u00f6");
             break; // o dieresis
           case 155 :
             buf.append("\u00f5");
             break; // o tilde
           case 156 :
             buf.append("\u00fa");
             break; // u acute
           case 157 :
             buf.append("\u00f9");
             break; // u grave
           case 158 :
             buf.append("\u00fb");
             break; // u circumflex
           case 159 :
             buf.append("\u00fc");
             break; // u dieresis
           case 160 :
             buf.append("\u1e6d");
             break; // t underdot
           case 161 :
             buf.append("\u00b0");
             break; // degree
           case 162 :
             buf.append("\u1ebd");
             break; // e tilde
           case 163 :
             buf.append("\u00a3");
             break; // sterling
           case 164 :
             buf.append("\u00a7");
             break; // section
           case 166 :
             buf.append("\u00b6");
             break; // paragraph
           case 167 :
             buf.append("\u015b");
             break; // s acute
           case 168 :
             buf.append("\u1e5b");
             break; // r underdot
           case 169 :
             buf.append("\u1e67");
             break; // s caron
           case 171 :
             buf.append("\u0301");
             break; // acute
           case 172 :
             buf.append("\u0308");
             break; // dieresis
           case 173 :
             buf.append("\u1e6d");
             break; // t underdot
           case 174 :
             buf.append("\u00c6");
             break; // AE
           case 175 :
             buf.append("\u014d");
             break; // o macron
           case 176 :
             buf.append("\u0129");
             break; // i tilde
           case 177 :
             buf.append("\u00b1");
             break; // plusminus
           case 180 :
             buf.append("\u012b");
             break; // i macron
           case 181 :
             buf.append("\u1e43");
             break; // m underdot
           case 182 :
             buf.append("\u1e0d");
             break; // d underdot
           case 183 :
             buf.append("\u1e63");
             break; // s underdot
           case 185 :
             buf.append("\u017a");
             break; // z acute
           case 186 :
             buf.append("\u1e45");
             break; // n overdot
           case 189 :
             buf.append("\u0169");
             break; // u tilde
           case 190 :
             buf.append("\u00e6");
             break; // ae
           case 191 :
             buf.append("\u00f8");
             break; // oslash
           case 192 :
             buf.append("\u0304\u0306");
             break; // macron breve
           case 194 :
             buf.append("\u1e37");
             break; // 
           case 195 :
             buf.append("j\u0305");
             break; // j macron [does a single char exist?]
           case 196 :
             buf.append("\u0103");
             break; // a breve
           case 197 :
             buf.append("\u016d");
             break; // u breve
           case 200 :
             buf.append("\u1e42");
             break; // M underdot
           case 201 :
             buf.append("\u2026");
             break; // ellipsis
           case 203 :
             buf.append("\u00c0");
             break; // A grave
           case 204 :
             buf.append("\u00c3");
             break; // A tilde
           case 205 :
             buf.append("\u00d5");
             break; // O tilde
           case 206 :
             buf.append("m\u0306");
             break; // m breve
           case 207 :
             buf.append("\u0153");
             break; // oe
           case 208 :
             buf.append("\u2013");
             break; // endash
           case 209 :
             buf.append("\u2014");
             break; // emdash
           case 210 :
             buf.append("\u201c");
             break; // quotedblleft
           case 211 :
             buf.append("\u201d");
             break; // quotedblright
           case 212 :
             buf.append("\u2018");
             break; // quoteleft
           case 213 :
             buf.append("\u2019");
             break; // quoteright
           case 214 :
             buf.append("\u1e37");
             break; // l underring [actually underdot]
           case 215 :
             buf.append("\u1e41");
             break; // m overdot
           case 216 :
             buf.append("n\u0306");
             break; // n breve
           case 217 :
             buf.append("\u00d7");
             break; // multiply
           case 219 :
             buf.append("\u1e5b");
             break; // r underring [actually underdot]
           case 220 :
             buf.append("\u1e44");
             break; // N overdot
           case 221 :
             buf.append("\u1e62");
             break; // S underdot
           case 222 :
             buf.append("\u1e24");
             break; // H underdot
           case 223 :
             buf.append("\u1e0c");
             break; // D underdot
           case 224 :
             buf.append("\u2021");
             break; // daggerdbl
           case 226 :
             buf.append("\u1e36");
             break; // L underdot
           case 227 :
             buf.append("\u0113");
             break; // e macron
           case 229 :
             buf.append("\u1e5f");
             break; // r underbar
           case 230 :
             buf.append("r\u0324");
             break; // r underdieresis
           case 231 :
             buf.append("\u012a");
             break; // I macron
           case 232 :
             buf.append("\u016b");
             break; // u macron
           case 233 :
             buf.append("\u01e6c");
             break; // T underdot
           case 234 :
             buf.append("\u1e64");
             break; // S acute
           case 235 :
             buf.append("\u2020");
             break; // dagger
           case 236 :
             buf.append("\u0115");
             break; // e breve
           case 237 :
             buf.append("\u014f");
             break; // o breve
           case 238 :
             buf.append("\u0100");
             break; // A macron
           case 239 :
             buf.append("\u1e46");
             break; // N underdot
           case 241 :
             buf.append("\u1e3b");
             break; // l underbar
           case 242 :
             buf.append("\u016a");
             break; // U macron
           case 243 :
             buf.append("\u0179");
             break; // Z acute
           case 244 :
             buf.append("\u1e5a");
             break; // R underdot
           case 245 :
             buf.append("\u0131");
             break; // dotlessi
           case 246 :
             buf.append("\u1e47");
             break; // n underdot
           case 247 :
             buf.append("\u1e49");
             break; // n underbar
           case 248 :
             buf.append("\u0304");
             break; // macron
           case 249 :
             buf.append("\u0306");
             break; // breve
           case 250 :
             buf.append("\u1e25");
             break; // h underdot
           case 251 :
             buf.append("\u012d");
             break; // i breve
           case 252 :
             buf.append("\u0327");
             break; // cedilla
           case 253 :
             buf.append("\u030b");
             break; // hungarumlaut
           case 254 :
             buf.append("\u0328");
             break; // ogonek
           case 255 :
             buf.append("\u030c");
             break; // caron
           case 130 :
             buf.append("\u012b\u0303");
             break; // imacron tilde
           case 165 :
             buf.append("\u1e5d");
             break; // runderdot macron
           case 170 :
             buf.append("\u016b\0306");
             break; // umacron breve
           case 178 :
             buf.append("\u0101\u0301");
             break; // amacron acute
           case 179 :
             buf.append("\u016b\u0301");
             break; // umacron acute
           case 184 :
             buf.append("\u0113\u0301");
             break; // emacron acute
           case 187 :
             buf.append("\u0113\u0300");
             break; // emacron breve
           case 188 :
             buf.append("\u014d\u0300");
             break; // omacron breve
           case 193 :
             buf.append("\u0101\u0306");
             break; // amacron breve
           case 198 :
             buf.append("\u0101\u0303");
             break; // amacron tilde
           case 199 :
             buf.append("\u012b\u0301");
             break; // imacron acute
           case 218 :
             buf.append("\u1e00");
             break; // runderdotmacron acute
           case 225 :
             buf.append("\u1e5b\u0301");
             break; // runderdot acute
           case 228 :
             buf.append("\u012b\u0306");
             break; // imacron breve
           case 240 :
             buf.append("\u016b\u0303");
             break; // umacron tilde
           default :
             buf.append(c);
             break;
       }        }
     }      }
     return buf.toString();      return buf.toString();
   }    }
   static public String normanToUnicodeNew(String inp) {    static public String normanToUnicodeNew(String inp)
     {
     StringBuffer buf = new StringBuffer();      StringBuffer buf = new StringBuffer();
     for (int i = 0; i < inp.length(); i++) {      for (int i = 0; i < inp.length(); i++)
       {
       char c = inp.charAt(i);        char c = inp.charAt(i);
       switch (c) {        switch (c)
         case 1: buf.append("\u00d0"); break; // Eth        {
         case 2: buf.append("\u00f0"); break; // eth          case 1 :
         case 3: buf.append("\u0141"); break; // Lslash            buf.append("\u00d0");
         case 4: buf.append("\u0142"); break; // lslash            break; // Eth
         case 5: buf.append("\u0160"); break; // S caron          case 2 :
         case 6: buf.append("\u0161"); break; // s caron            buf.append("\u00f0");
         case 7: buf.append("\u00dd"); break; // Y acute            break; // eth
         case 8: buf.append("\u00fd"); break; // y acute          case 3 :
         case 11: buf.append("\u00de"); break; // Thorn            buf.append("\u0141");
         case 12: buf.append("\u00fe"); break; // thorn            break; // Lslash
         case 14: buf.append("\u017d"); break; // Z caron          case 4 :
         case 15: buf.append("\u017e"); break; // z caron            buf.append("\u0142");
         case 17: buf.append("\u0073"); break; // asciitilde            break; // lslash
         case 18: buf.append("j\u0305"); break; // j macron [does a single char exist?]          case 5 :
         case 19: buf.append("^"); break; // circumflex            buf.append("\u0160");
         case 20: buf.append("\u0303"); break; // tilde            break; // S caron
         case 21: buf.append("\u00bd"); break; // onehalf          case 6 :
         case 22: buf.append("\u00bc"); break; // onequarter            buf.append("\u0161");
         case 23: buf.append("\u00b9"); break; // onesuperior            break; // s caron
         case 24: buf.append("\u00be"); break; // threequarters          case 7 :
         case 25: buf.append("\u00b3"); break; // threesuperior            buf.append("\u00dd");
         case 26: buf.append("\u00b2"); break; // twosuperior            break; // Y acute
         case 27: buf.append("\u00a6"); break; // brokenbar          case 8 :
         case 28: buf.append("-"); break; // minus            buf.append("\u00fd");
         case 29: buf.append("\u00d7"); break; // multiply            break; // y acute
         case 39: buf.append("'"); break; // quotesingle          case 11 :
         case 94: buf.append("\u0302"); break; // circumflex            buf.append("\u00de");
         case 96: buf.append("\u0300"); break; // grave            break; // Thorn
         case 196: buf.append("\u00c4"); break; // A dieresis          case 12 :
         case 197: buf.append("\u00c5"); break; // A ring            buf.append("\u00fe");
         case 201: buf.append("\u00c9"); break; // E acute            break; // thorn
         case 209: buf.append("\u00d1"); break; // N tilde          case 14 :
         case 214: buf.append("\u00d6"); break; // O dieresis            buf.append("\u017d");
         case 220: buf.append("\u00dc"); break; // U dieresis            break; // Z caron
         case 225: buf.append("\u00e1"); break; // a acute          case 15 :
         case 224: buf.append("\u00e0"); break; // a grave            buf.append("\u017e");
         case 226: buf.append("\u00e2"); break; // a circumflex            break; // z caron
         case 228: buf.append("\u00e4"); break; // a dieresis          case 17 :
         case 227: buf.append("\u00e3"); break; // a tilde            buf.append("\u0073");
         case 229: buf.append("\u0101"); break; // a macron            break; // asciitilde
         case 231: buf.append("\u00e7"); break; // c cedilla          case 18 :
         case 233: buf.append("\u00e9"); break; // e acute            buf.append("j\u0305");
         case 232: buf.append("\u00e8"); break; // e grave            break; // j macron [does a single char exist?]
         case 234: buf.append("\u00ea"); break; // e circumflex          case 19 :
         case 235: buf.append("\u00eb"); break; // e dieresis            buf.append("^");
         case 237: buf.append("\u00ed"); break; // i acute            break; // circumflex
         case 236: buf.append("\u00ec"); break; // i grave          case 20 :
         case 238: buf.append("\u00ee"); break; // i circumflex            buf.append("\u0303");
         case 239: buf.append("\u00ef"); break; // i dieresis            break; // tilde
         case 241: buf.append("\u00f1"); break; // n tilde          case 21 :
         case 243: buf.append("\u00f3"); break; // o acute            buf.append("\u00bd");
         case 242: buf.append("\u00f2"); break; // o grave            break; // onehalf
         case 244: buf.append("\u00f4"); break; // o circumflex          case 22 :
         case 246: buf.append("\u00f6"); break; // o dieresis            buf.append("\u00bc");
         case 245: buf.append("\u00f5"); break; // o tilde            break; // onequarter
         case 250: buf.append("\u00fa"); break; // u acute          case 23 :
         case 249: buf.append("\u00f9"); break; // u grave            buf.append("\u00b9");
         case 251: buf.append("\u00fb"); break; // u circumflex            break; // onesuperior
         case 252: buf.append("\u00fc"); break; // u dieresis          case 24 :
         case 8224: buf.append("\u1e6d"); break; // t underdot            buf.append("\u00be");
         case 176: buf.append("\u00b0"); break; // degree            break; // threequarters
         case 162: buf.append("\u1ebd"); break; // e tilde          case 25 :
         case 163: buf.append("\u00a3"); break; // sterling            buf.append("\u00b3");
         case 167: buf.append("\u00a7"); break; // section            break; // threesuperior
         case 182: buf.append("\u00b6"); break; // paragraph          case 26 :
         case 223: buf.append("\u015b"); break; // s acute            buf.append("\u00b2");
         case 174: buf.append("\u1e5b"); break; // r underdot            break; // twosuperior
         case 169: buf.append("\u1e45"); break; // n overdot          case 27 :
         case 180: buf.append("\u0301"); break; // acute            buf.append("\u00a6");
         case 168: buf.append("\u0308"); break; // dieresis            break; // brokenbar
         case 8800: buf.append("\u1e6d"); break; // t underdot          case 28 :
         case 198: buf.append("\u00c6"); break; // AE            buf.append("-");
         case 216: buf.append("\u014d"); break; // o macron            break; // minus
         case 8734: buf.append("\u0129"); break; // i tilde          case 29 :
         case 177: buf.append("\u00b1"); break; // plusminus            buf.append("\u00d7");
         case 165: buf.append("\u012b"); break; // i macron            break; // multiply
         case 181: buf.append("\u1e43"); break; // m underdot          case 39 :
         case 8706: buf.append("\u1e0d"); break; // d underdot            buf.append("'");
         case 8721: buf.append("\u1e63"); break; // s underdot            break; // quotesingle
         case 960: buf.append("\u017a"); break; // z acute          case 94 :
         case 8747: buf.append("\u1e45"); break; // n overdot            buf.append("\u0302");
         case 937: buf.append("\u0169"); break; // u tilde            break; // circumflex
         case 230: buf.append("\u00e6"); break; // ae          case 96 :
         case 248: buf.append("\u00f8"); break; // oslash            buf.append("\u0300");
         case 191: buf.append("\u0304\u0306"); break; // macron breve            break; // grave
         case 172: buf.append("\u1e37"); break; //           case 196 :
         case 8730: buf.append("j\u0305"); break; // j macron [does a single char exist?]            buf.append("\u00c4");
         case 402: buf.append("\u0103"); break; // a breve            break; // A dieresis
         case 8776: buf.append("\u016d"); break; // u breve          case 197 :
         case 187: buf.append("\u1e42"); break; // M underdot            buf.append("\u00c5");
         case 8230: buf.append("\u2026"); break; // ellipsis            break; // A ring
         case 192: buf.append("\u00c0"); break; // A grave          case 201 :
         case 195: buf.append("\u00c3"); break; // A tilde            buf.append("\u00c9");
         case 213: buf.append("\u00d5"); break; // O tilde            break; // E acute
         case 338: buf.append("m\u0306"); break; // m breve          case 209 :
         case 339: buf.append("\u0153"); break; // oe            buf.append("\u00d1");
         case 8211: buf.append("\u2013"); break; // endash            break; // N tilde
         case 8212: buf.append("\u2014"); break; // emdash          case 214 :
         case 8220: buf.append("\u201c"); break; // quotedblleft            buf.append("\u00d6");
         case 8221: buf.append("\u201d"); break; // quotedblright            break; // O dieresis
         case 8216: buf.append("\u2018"); break; // quoteleft          case 220 :
         case 8217: buf.append("\u2019"); break; // quoteright            buf.append("\u00dc");
         case 247: buf.append("\u1e37"); break; // l underring [actually underdot]            break; // U dieresis
         case 9674: buf.append("\u1e41"); break; // m overdot          case 225 :
         case 255: buf.append("n\u0306"); break; // n breve            buf.append("\u00e1");
         case 376: buf.append("\u00d7"); break; // multiply            break; // a acute
         case 8364: buf.append("\u1e5b"); break; // r underring [actually underdot]          case 224 :
         case 8249: buf.append("\u1e44"); break; // N overdot            buf.append("\u00e0");
         case 8250: buf.append("\u1e62"); break; // S underdot            break; // a grave
         case 64257: buf.append("\u1e24"); break; // H underdot          case 226 :
         case 64258: buf.append("\u1e0c"); break; // D underdot            buf.append("\u00e2");
         case 8225: buf.append("\u2021"); break; // daggerdbl            break; // a circumflex
         case 8218: buf.append("\u1e36"); break; // L underdot          case 228 :
         case 8222: buf.append("\u0113"); break; // e macron            buf.append("\u00e4");
         case 194: buf.append("\u1e5f"); break; // r underbar            break; // a dieresis
         case 202: buf.append("r\u0324"); break; // r underdieresis          case 227 :
         case 193: buf.append("\u012a"); break; // I macron            buf.append("\u00e3");
         case 203: buf.append("\u016b"); break; // u macron            break; // a tilde
         case 200: buf.append("\u1e6c"); break; // T underdot          case 229 :
         case 205: buf.append("\u1e64"); break; // S acute            buf.append("\u0101");
         case 206: buf.append("\u2020"); break; // dagger            break; // a macron
         case 207: buf.append("\u0115"); break; // e breve          case 231 :
         case 204: buf.append("\u014f"); break; // o breve            buf.append("\u00e7");
         case 211: buf.append("\u0100"); break; // A macron            break; // c cedilla
         case 212: buf.append("\u1e46"); break; // N underdot          case 233 :
         case 210: buf.append("\u1e3b"); break; // l underbar            buf.append("\u00e9");
         case 218: buf.append("\u016a"); break; // U macron            break; // e acute
         case 219: buf.append("\u0179"); break; // Z acute          case 232 :
         case 217: buf.append("\u1e5a"); break; // R underdot            buf.append("\u00e8");
         case 305: buf.append("\u0131"); break; // dotlessi            break; // e grave
         case 710: buf.append("\u1e47"); break; // n underdot          case 234 :
         case 732: buf.append("\u1e49"); break; // n underbar            buf.append("\u00ea");
         case 175: buf.append("\u0304"); break; // macron            break; // e circumflex
         case 728: buf.append("\u0306"); break; // breve          case 235 :
         case 729: buf.append("\u1e25"); break; // h underdot            buf.append("\u00eb");
         case 730: buf.append("\u012d"); break; // i breve            break; // e dieresis
         case 184: buf.append("\u0327"); break; // cedilla          case 237 :
         case 733: buf.append("\u030b"); break; // hungarumlaut            buf.append("\u00ed");
         case 731: buf.append("\u0328"); break; // ogonek            break; // i acute
         case 711: buf.append("\u030c"); break; // caron          case 236 :
         case 199: buf.append("\u012b\u0303"); break; // imacron tilde            buf.append("\u00ec");
         case 8226: buf.append("\u1e5d"); break; // runderdot macron            break; // i grave
         case 8482: buf.append("\u016b\0306"); break; // umacron breve          case 238 :
         case 8804: buf.append("\u0101\u0301"); break; // amacron acute            buf.append("\u00ee");
         case 8805: buf.append("\u016b\u0301"); break; // umacron acute            break; // i circumflex
         case 8719: buf.append("\u0113\u0301"); break; // emacron acute          case 239 :
         case 170: buf.append("\u0113\u0300"); break; // emacron breve            buf.append("\u00ef");
         case 186: buf.append("\u014d\u0300"); break; // omacron breve            break; // i dieresis
         case 161: buf.append("\u0101\u0306"); break; // amacron breve          case 241 :
         case 8710: buf.append("\u0101\u0303"); break; // amacron tilde            buf.append("\u00f1");
         case 171: buf.append("\u012b\u0301"); break; // imacron acute            break; // n tilde
         case 8260: buf.append("\u1e00"); break; // runderdotmacron acute          case 243 :
         case 183: buf.append("\u1e5b\u0301"); break; // runderdot acute            buf.append("\u00f3");
         case 8240: buf.append("\u012b\u0306"); break; // imacron breve            break; // o acute
         case 63743: buf.append("\u016b\u0303"); break; // umacron tilde          case 242 :
         default: buf.append(c); break;            buf.append("\u00f2");
             break; // o grave
           case 244 :
             buf.append("\u00f4");
             break; // o circumflex
           case 246 :
             buf.append("\u00f6");
             break; // o dieresis
           case 245 :
             buf.append("\u00f5");
             break; // o tilde
           case 250 :
             buf.append("\u00fa");
             break; // u acute
           case 249 :
             buf.append("\u00f9");
             break; // u grave
           case 251 :
             buf.append("\u00fb");
             break; // u circumflex
           case 252 :
             buf.append("\u00fc");
             break; // u dieresis
           case 8224 :
             buf.append("\u1e6d");
             break; // t underdot
           case 176 :
             buf.append("\u00b0");
             break; // degree
           case 162 :
             buf.append("\u1ebd");
             break; // e tilde
           case 163 :
             buf.append("\u00a3");
             break; // sterling
           case 167 :
             buf.append("\u00a7");
             break; // section
           case 182 :
             buf.append("\u00b6");
             break; // paragraph
           case 223 :
             buf.append("\u015b");
             break; // s acute
           case 174 :
             buf.append("\u1e5b");
             break; // r underdot
           case 169 :
             buf.append("\u1e45");
             break; // n overdot
           case 180 :
             buf.append("\u0301");
             break; // acute
           case 168 :
             buf.append("\u0308");
             break; // dieresis
           case 8800 :
             buf.append("\u1e6d");
             break; // t underdot
           case 198 :
             buf.append("\u00c6");
             break; // AE
           case 216 :
             buf.append("\u014d");
             break; // o macron
           case 8734 :
             buf.append("\u0129");
             break; // i tilde
           case 177 :
             buf.append("\u00b1");
             break; // plusminus
           case 165 :
             buf.append("\u012b");
             break; // i macron
           case 181 :
             buf.append("\u1e43");
             break; // m underdot
           case 8706 :
             buf.append("\u1e0d");
             break; // d underdot
           case 8721 :
             buf.append("\u1e63");
             break; // s underdot
           case 960 :
             buf.append("\u017a");
             break; // z acute
           case 8747 :
             buf.append("\u1e45");
             break; // n overdot
           case 937 :
             buf.append("\u0169");
             break; // u tilde
           case 230 :
             buf.append("\u00e6");
             break; // ae
           case 248 :
             buf.append("\u00f8");
             break; // oslash
           case 191 :
             buf.append("\u0304\u0306");
             break; // macron breve
           case 172 :
             buf.append("\u1e37");
             break; // 
           case 8730 :
             buf.append("j\u0305");
             break; // j macron [does a single char exist?]
           case 402 :
             buf.append("\u0103");
             break; // a breve
           case 8776 :
             buf.append("\u016d");
             break; // u breve
           case 187 :
             buf.append("\u1e42");
             break; // M underdot
           case 8230 :
             buf.append("\u2026");
             break; // ellipsis
           case 192 :
             buf.append("\u00c0");
             break; // A grave
           case 195 :
             buf.append("\u00c3");
             break; // A tilde
           case 213 :
             buf.append("\u00d5");
             break; // O tilde
           case 338 :
             buf.append("m\u0306");
             break; // m breve
           case 339 :
             buf.append("\u0153");
             break; // oe
           case 8211 :
             buf.append("\u2013");
             break; // endash
           case 8212 :
             buf.append("\u2014");
             break; // emdash
           case 8220 :
             buf.append("\u201c");
             break; // quotedblleft
           case 8221 :
             buf.append("\u201d");
             break; // quotedblright
           case 8216 :
             buf.append("\u2018");
             break; // quoteleft
           case 8217 :
             buf.append("\u2019");
             break; // quoteright
           case 247 :
             buf.append("\u1e37");
             break; // l underring [actually underdot]
           case 9674 :
             buf.append("\u1e41");
             break; // m overdot
           case 255 :
             buf.append("n\u0306");
             break; // n breve
           case 376 :
             buf.append("\u00d7");
             break; // multiply
           case 8364 :
             buf.append("\u1e5b");
             break; // r underring [actually underdot]
           case 8249 :
             buf.append("\u1e44");
             break; // N overdot
           case 8250 :
             buf.append("\u1e62");
             break; // S underdot
           case 64257 :
             buf.append("\u1e24");
             break; // H underdot
           case 64258 :
             buf.append("\u1e0c");
             break; // D underdot
           case 8225 :
             buf.append("\u2021");
             break; // daggerdbl
           case 8218 :
             buf.append("\u1e36");
             break; // L underdot
           case 8222 :
             buf.append("\u0113");
             break; // e macron
           case 194 :
             buf.append("\u1e5f");
             break; // r underbar
           case 202 :
             buf.append("r\u0324");
             break; // r underdieresis
           case 193 :
             buf.append("\u012a");
             break; // I macron
           case 203 :
             buf.append("\u016b");
             break; // u macron
           case 200 :
             buf.append("\u1e6c");
             break; // T underdot
           case 205 :
             buf.append("\u1e64");
             break; // S acute
           case 206 :
             buf.append("\u2020");
             break; // dagger
           case 207 :
             buf.append("\u0115");
             break; // e breve
           case 204 :
             buf.append("\u014f");
             break; // o breve
           case 211 :
             buf.append("\u0100");
             break; // A macron
           case 212 :
             buf.append("\u1e46");
             break; // N underdot
           case 210 :
             buf.append("\u1e3b");
             break; // l underbar
           case 218 :
             buf.append("\u016a");
             break; // U macron
           case 219 :
             buf.append("\u0179");
             break; // Z acute
           case 217 :
             buf.append("\u1e5a");
             break; // R underdot
           case 305 :
             buf.append("\u0131");
             break; // dotlessi
           case 710 :
             buf.append("\u1e47");
             break; // n underdot
           case 732 :
             buf.append("\u1e49");
             break; // n underbar
           case 175 :
             buf.append("\u0304");
             break; // macron
           case 728 :
             buf.append("\u0306");
             break; // breve
           case 729 :
             buf.append("\u1e25");
             break; // h underdot
           case 730 :
             buf.append("\u012d");
             break; // i breve
           case 184 :
             buf.append("\u0327");
             break; // cedilla
           case 733 :
             buf.append("\u030b");
             break; // hungarumlaut
           case 731 :
             buf.append("\u0328");
             break; // ogonek
           case 711 :
             buf.append("\u030c");
             break; // caron
           case 199 :
             buf.append("\u012b\u0303");
             break; // imacron tilde
           case 8226 :
             buf.append("\u1e5d");
             break; // runderdot macron
           case 8482 :
             buf.append("\u016b\0306");
             break; // umacron breve
           case 8804 :
             buf.append("\u0101\u0301");
             break; // amacron acute
           case 8805 :
             buf.append("\u016b\u0301");
             break; // umacron acute
           case 8719 :
             buf.append("\u0113\u0301");
             break; // emacron acute
           case 170 :
             buf.append("\u0113\u0300");
             break; // emacron breve
           case 186 :
             buf.append("\u014d\u0300");
             break; // omacron breve
           case 161 :
             buf.append("\u0101\u0306");
             break; // amacron breve
           case 8710 :
             buf.append("\u0101\u0303");
             break; // amacron tilde
           case 171 :
             buf.append("\u012b\u0301");
             break; // imacron acute
           case 8260 :
             buf.append("\u1e00");
             break; // runderdotmacron acute
           case 183 :
             buf.append("\u1e5b\u0301");
             break; // runderdot acute
           case 8240 :
             buf.append("\u012b\u0306");
             break; // imacron breve
           case 63743 :
             buf.append("\u016b\u0303");
             break; // umacron tilde
           default :
             buf.append(c);
             break;
       }        }
     }      }
     return buf.toString();      return buf.toString();
Line 2694  class Convert Line 3800  class Convert
         while (tokenizer.hasMoreTokens())          while (tokenizer.hasMoreTokens())
         {          {
           String fieldName = tokenizer.nextToken().trim();            String fieldName = tokenizer.nextToken().trim();
           fieldNames[fieldIndex] = convertText(fieldName);            fieldNames[fieldIndex] =beanDest.getQC() + convertText(fieldName)+beanDest.getQC();
          // System.out.println("field "+ fieldNames[fieldIndex]);           // System.out.println("field "+ fieldNames[fieldIndex]);
           fieldIndex++;            fieldIndex++;
         }          }
Line 2707  class Convert Line 3813  class Convert
         for (Iterator iter = fieldNamesVec.iterator(); iter.hasNext();)          for (Iterator iter = fieldNamesVec.iterator(); iter.hasNext();)
         {          {
           String element = (String) iter.next();            String element = (String) iter.next();
           fieldNames[++fieldIndex] = bean.getQC() + convertText(element) + bean.getQC();            fieldNames[++fieldIndex] = beanDest.getQC() + convertText(element) + beanDest.getQC();
          // System.out.println("field " + fieldNames[fieldIndex]);           // System.out.println("field " + fieldNames[fieldIndex]);
         }          }
       }        }
     }      }
     return new ConversionProperties(destTableName,fieldNames);      return new ConversionProperties(destTableName,fieldNames);
   }    }
     /**
      * creates an insert into statement for the specified table and given
      * field names 
      * @param destTableName
      * @param fieldNames
      * @return
      */
     public static StringBuffer createInsertCommand(String destTableName, String[] fieldNames)
     {
       StringBuffer command = new StringBuffer();
       command.append("INSERT  INTO ");
       command.append(beanDest.getQC());
       command.append(destTableName); //convertText((String) names.get(tbIndex)));
       command.append(beanDest.getQC());
       command.append(" (");
       for (int i = 0; i < fieldNames.length; i++)
       {
         command.append(fieldNames[i]);
         if (i < fieldNames.length - 1)
           command.append(",");
       }
       command.append(") ");
   
       command.append(" values ( ");
       // add a question marks for every field 
       for (int i = 0; i < bean.getColumnNames().size() - 1; ++i)
         command.append("?,");
       command.append("?)");
       return command;
     }
     public static StringBuffer createUpdateCommand(String destTableName, String[] fieldNames, String id)
     {
       StringBuffer command = new StringBuffer();
   
       command.append("UPDATE ");
       command.append(beanDest.getQC());
       command.append(destTableName);
       //command.append(convertText((String) names.get(tbIndex)));
       command.append(beanDest.getQC());
       command.append(" SET  ");
   
       int size = bean.getColumnNames().size();
       for (int i = 0; i < size - 1; ++i)
         command.append(fieldNames[i] + " = ? ,");
       command.append(fieldNames[size - 1] + " = ? ");
       command.append("WHERE " + id + " =  ?");
       return command;
     }
     public static StringBuffer createDeleteCommand(String destTableName, String idField)
     {
       StringBuffer command = new StringBuffer();
   
       command.append("DELETE FROM");
       command.append(beanDest.getQC());
       command.append(destTableName);
       //command.append(convertText((String) names.get(tbIndex)));
       command.append(beanDest.getQC());
       command.append("WHERE " + idField + " =  ?");
       return command;
     }
 }  }
   

Removed from v.1.64  
changed lines
  Added in v.1.71


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>