Diff for /FM2SQL/Attic/Convert.java between versions 1.54 and 1.57

version 1.54, 2004/04/06 10:34:15 version 1.57, 2004/06/14 12:12:31
Line 12 Line 12
  * rogo     * rogo  
  */   */
   
 import java.util.*;  
 import java.sql.*;  
 import java.awt.Cursor;  import java.awt.Cursor;
 import java.io.BufferedReader;  import java.io.BufferedReader;
 import java.io.BufferedWriter;  import java.io.BufferedWriter;
Line 25  import java.io.InputStreamReader; Line 23  import java.io.InputStreamReader;
 import java.io.OutputStreamWriter;  import java.io.OutputStreamWriter;
 import java.io.PrintStream;  import java.io.PrintStream;
 import java.io.UnsupportedEncodingException;  import java.io.UnsupportedEncodingException;
   import java.sql.PreparedStatement;
   import java.sql.SQLException;
   import java.sql.Statement;
   import java.sql.Types;
   import java.util.ArrayList;
   import java.util.Iterator;
   import java.util.List;
   import java.util.StringTokenizer;
   import java.util.TreeSet;
   import java.util.Vector;
   
 import com.exploringxml.xml.Node;  import com.exploringxml.xml.Node;
 import com.exploringxml.xml.Xparse;  import com.exploringxml.xml.Xparse;
Line 78  class Convert Line 86  class Convert
     bean = source;      bean = source;
     beanDest = destination;      beanDest = destination;
     convert(null,null,names,layouts,selects,creates,ids,mode,delimiter);      convert(null,null,names,layouts,selects,creates,ids,mode,delimiter);
     if(true) return;      if (true)
         return;
     StringBuffer command = null;      StringBuffer command = null;
     try      try
     {      {
Line 462  class Convert Line 471  class Convert
    * @throws Exception     * @throws Exception
    */      */ 
       
        
   public static void convert(String source, String destination, Vector names, Vector layouts, Vector selects, Vector creates, Vector ids, int mode,String delimiter) throws Exception    public static void convert(String source, String destination, Vector names, Vector layouts, Vector selects, Vector creates, Vector ids, int mode,String delimiter) throws Exception
   {    {
   
Line 483  class Convert Line 491  class Convert
     int deltaID = 1;      int deltaID = 1;
     String idField = "";      String idField = "";
     String destTableName = "";      String destTableName = "";
       String[] fieldNames = null;
     if (source != null && destination != null)      if (source != null && destination != null)
     {      {
       // setting user and passwd         // setting user and passwd 
Line 563  class Convert Line 572  class Convert
           String create =creates.get(tbIndex).toString().toLowerCase();            String create =creates.get(tbIndex).toString().toLowerCase();
           int fromIndex = create.indexOf("table")+5;            int fromIndex = create.indexOf("table")+5;
           int toIndex   = create.indexOf("(");            int toIndex   = create.indexOf("(");
             int endIndex = create.indexOf(")", toIndex);
   
           destTableName = create.substring(fromIndex,toIndex).replaceAll(beanDest.getQC(),"").trim();            destTableName = create.substring(fromIndex,toIndex).replaceAll(beanDest.getQC(),"").trim();
           System.out.println("destTable "+destTableName);            System.out.println("destTable "+destTableName);
             // retrieve field_names from select statement
             if (query.indexOf("*") < 0)
             {
               int selectEndIndex = query.indexOf("from");
               StringTokenizer tokenizer = new StringTokenizer(query.substring(6, selectEndIndex), ",");
               int numFields = tokenizer.countTokens();
               fieldNames = new String[numFields];
               int fieldIndex = 0;
               while (tokenizer.hasMoreTokens())
               {
                 String fieldName = tokenizer.nextToken().trim();
                 fieldNames[fieldIndex] = convertText(fieldName);
                 System.out.println(fieldNames[fieldIndex]);
                 fieldIndex++;
               }
                           
         } else          } else
             {
               // use create statement for field names
               StringTokenizer tokenizer = new StringTokenizer(create.substring(toIndex + 1, endIndex), ",");
               int numFields = tokenizer.countTokens();
               fieldNames = new String[numFields];
               int fieldIndex = 0;
               while (tokenizer.hasMoreTokens())
               {
                 String fieldName = tokenizer.nextToken().trim();
                 int index = fieldName.lastIndexOf(" ");
                 fieldNames[fieldIndex] = fieldName.substring(0, index);
                 System.out.println(fieldNames[fieldIndex]);
                 fieldIndex++;
               }
             }
           } else
           {
           destTableName = convertText(names.get(tbIndex).toString());            destTableName = convertText(names.get(tbIndex).toString());
   
             // retrieve field_names from select statement
             if (query.indexOf("*") < 0)
             {
               int selectEndIndex = query.indexOf("from");
               StringTokenizer tokenizer = new StringTokenizer(query.substring(6, selectEndIndex), ",");
               int numFields = tokenizer.countTokens();
               fieldNames = new String[numFields];
               int fieldIndex = 0;
               while (tokenizer.hasMoreTokens())
               {
                 String fieldName = tokenizer.nextToken().trim();
                 fieldNames[fieldIndex] = convertText(fieldName);
                // System.out.println("field "+ fieldNames[fieldIndex]);
                 fieldIndex++;
               }
   
             } else
             {
               Vector fieldNamesVec = bean.getColumnNames();
               fieldNames = new String[fieldNamesVec.size()];
               int fieldIndex = -1;
               for (Iterator iter = fieldNamesVec.iterator(); iter.hasNext();)
               {
                 String element = (String) iter.next();
                 fieldNames[++fieldIndex] = bean.getQC() + convertText(element) + bean.getQC();
                // System.out.println("field " + fieldNames[fieldIndex]);
               }
             }
           }
         if (mode == Convert.DataBase.CONVERT_MODE)          if (mode == Convert.DataBase.CONVERT_MODE)
         {          {
   
Line 644  class Convert Line 716  class Convert
         command.append(beanDest.getQC());          command.append(beanDest.getQC());
         command.append(destTableName); //convertText((String) names.get(tbIndex)));          command.append(destTableName); //convertText((String) names.get(tbIndex)));
         command.append(beanDest.getQC());          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 ( ");          command.append(" values ( ");
   
Line 668  class Convert Line 748  class Convert
             ++counter;              ++counter;
             if (counter == 0&&dialog!=null)              if (counter == 0&&dialog!=null)
               dialog.title.setText("Check if data  is available");                dialog.title.setText("Check if data  is available");
             else              else if (dialog != null)
               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, numHits);
             if (myIds.isEmpty())              if (myIds.isEmpty())
Line 832  class Convert Line 911  class Convert
         if(obj instanceof Double)          if(obj instanceof Double)
           {            {
             pstm.setDouble(k + 1, ((Double)obj).doubleValue());              pstm.setDouble(k + 1, ((Double)obj).doubleValue());
           }else          } else if (!str.equals("NULL"))
           if (!str.equals("NULL"))  
           pstm.setString(k + 1, str);            pstm.setString(k + 1, str);
         else          else
           pstm.setNull(k + 1, Types.NULL);            pstm.setNull(k + 1, Types.NULL);
Line 1148  class Convert Line 1226  class Convert
           throw new Error("parse error user tag missing");            throw new Error("parse error user tag missing");
         if (node2 == null)          if (node2 == null)
           throw new Error("parse error password tag missing");            throw new Error("parse error password tag missing");
         if(delimiterNode!=null) delimiter = delimiterNode.getCharacters();          if (delimiterNode != null)
             delimiter = delimiterNode.getCharacters();
         String url = node.getCharacters();          String url = node.getCharacters();
         String user = node1.getCharacters();          String user = node1.getCharacters();
         String password = node2.getCharacters();          String password = node2.getCharacters();
Line 1805  class Convert Line 1884  class Convert
       }        }
     } // to method      } // to method
   
     /**
      * Converts input String in norman encoding to unicode 
      * @param inp
      * @return converted String
      */
     static public String normanToUnicode(String inp) {
       StringBuffer buf = new StringBuffer();
       for (int i = 0; i < inp.length(); i++) {
         char c = inp.charAt(i);
        // System.out.println("char "+c+" "+(int)c);
         switch (c) {
         case 1: buf.append("\u00d0"); break; // Eth
         case 2: buf.append("\u00f0"); break; // eth
         case 3: buf.append("\u0141"); break; // Lslash
         case 4: buf.append("\u0142"); break; // lslash
         case 5: buf.append("\u0160"); break; // S caron
         case 6: buf.append("\u0161"); break; // s caron
         case 7: buf.append("\u00dd"); break; // Y acute
         case 8: buf.append("\u00fd"); break; // y acute
         case 11: buf.append("\u00de"); break; // Thorn
         case 12: buf.append("\u00fe"); break; // thorn
         case 14: buf.append("\u017d"); break; // Z caron
         case 15: buf.append("\u017e"); break; // z caron
         case 17: buf.append("\u0073"); break; // asciitilde
         case 18: buf.append("j\u0305"); break; // j macron [does a single char exist?]
         case 19: buf.append("^"); break; // circumflex
         case 20: buf.append("\u0303"); break; // tilde
         case 21: buf.append("\u00bd"); break; // onehalf
         case 22: buf.append("\u00bc"); break; // onequarter
         case 23: buf.append("\u00b9"); break; // onesuperior
         case 24: buf.append("\u00be"); break; // threequarters
         case 25: buf.append("\u00b3"); break; // threesuperior
         case 26: buf.append("\u00b2"); break; // twosuperior
         case 27: buf.append("\u00a6"); break; // brokenbar
         case 28: buf.append("-"); break; // minus
         case 29: buf.append("\u00d7"); break; // multiply
         case 39: buf.append("'"); break; // quotesingle
         case 94: buf.append("\u0302"); break; // circumflex
         case 96: buf.append("\u0300"); break; // grave
         case 196: buf.append("\u00c4"); break; // A dieresis
         case 197: buf.append("\u00c5"); break; // A ring
         case 201: buf.append("\u00c9"); break; // E acute
         case 209: buf.append("\u00d1"); break; // N tilde
         case 214: buf.append("\u00d6"); break; // O dieresis
         case 220: buf.append("\u00dc"); break; // U dieresis
         case 225: buf.append("\u00e1"); break; // a acute
         case 224: buf.append("\u00e0"); break; // a grave
         case 226: buf.append("\u00e2"); break; // a circumflex
         case 228: buf.append("\u00e4"); break; // a dieresis
         case 227: buf.append("\u00e3"); break; // a tilde
         case 229: 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 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: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)
          System.out.println("char "+c+" "+(int)c);
          break;
         }
       }
       return buf.toString();
     }
   
     static public String normanToUnicodeOld(String inp) {
       StringBuffer buf = new StringBuffer();
       for (int i = 0; i < inp.length(); i++) {
         char c = inp.charAt(i);
         switch (c) {
         case 1: buf.append("\u00d0"); break; // Eth
         case 2: buf.append("\u00f0"); break; // eth
         case 3: buf.append("\u0141"); break; // Lslash
         case 4: buf.append("\u0142"); break; // lslash
         case 5: buf.append("\u0160"); break; // S caron
         case 6: buf.append("\u0161"); break; // s caron
         case 7: buf.append("\u00dd"); break; // Y acute
         case 8: buf.append("\u00fd"); break; // y acute
         case 11: buf.append("\u00de"); break; // Thorn
         case 12: buf.append("\u00fe"); break; // thorn
         case 14: buf.append("\u017d"); break; // Z caron
         case 15: buf.append("\u017e"); break; // z caron
         case 17: buf.append("\u0073"); break; // asciitilde
         case 18: buf.append("j\u0305"); break; // j macron [does a single char exist?]
         case 19: buf.append("^"); break; // circumflex
         case 20: buf.append("\u0303"); break; // tilde
         case 21: buf.append("\u00bd"); break; // onehalf
         case 22: buf.append("\u00bc"); break; // onequarter
         case 23: buf.append("\u00b9"); break; // onesuperior
         case 24: buf.append("\u00be"); break; // threequarters
         case 25: buf.append("\u00b3"); break; // threesuperior
         case 26: buf.append("\u00b2"); break; // twosuperior
         case 27: buf.append("\u00a6"); break; // brokenbar
         case 28: buf.append("-"); break; // minus
         case 29: buf.append("\u00d7"); break; // multiply
         case 39: buf.append("'"); break; // quotesingle
         case 94: buf.append("\u0302"); break; // circumflex
         case 96: buf.append("\u0300"); break; // grave
         case 128: buf.append("\u00c4"); break; // A dieresis
         case 129: buf.append("\u00c5"); break; // A ring
         case 131: buf.append("\u00c9"); break; // E acute
         case 132: buf.append("\u00d1"); break; // N tilde
         case 133: buf.append("\u00d6"); break; // O dieresis
         case 134: buf.append("\u00dc"); break; // U dieresis
         case 135: buf.append("\u00e1"); break; // a acute
         case 136: buf.append("\u00e0"); break; // a grave
         case 137: buf.append("\u00e2"); break; // a circumflex
         case 138: buf.append("\u00e4"); break; // a dieresis
         case 139: buf.append("\u00e3"); break; // a tilde
         case 140: buf.append("\u0101"); break; // a macron
         case 141: buf.append("\u00e7"); break; // c cedilla
         case 142: buf.append("\u00e9"); break; // e acute
         case 143: buf.append("\u00e8"); break; // e grave
         case 144: buf.append("\u00ea"); break; // e circumflex
         case 145: buf.append("\u00eb"); break; // e dieresis
         case 146: buf.append("\u00ed"); break; // i acute
         case 147: buf.append("\u00ec"); break; // i grave
         case 148: buf.append("\u00ee"); break; // i circumflex
         case 149: buf.append("\u00ef"); break; // i dieresis
         case 150: buf.append("\u00f1"); break; // n tilde
         case 151: buf.append("\u00f3"); break; // o acute
         case 152: 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();
     }
   }    }
   

Removed from v.1.54  
changed lines
  Added in v.1.57


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