I'm checking this in.

This updates native2ascii:

* Now uses Classpath's getopt code
* Now supports -reverse option
* Now uses resource bundles for messages

I needed to change FileArgumentCallback.notifyFile to be able to throw
OptionException.  I'm not sure why I didn't have this before -- it is
obvious and useful.

Tom

2006-05-20  Tom Tromey  <[EMAIL PROTECTED]>

        * tools/gnu/classpath/tools/native2ascii/Messages.java: New file.
        * resource/gnu/classpath/tools/native2ascii/messages.properties: New
        file.
        * tools/gnu/classpath/tools/native2ascii/Native2ASCII.java
        (HandleFile): New class.
        (input, output, encoding, reversed): New fields.
        (createParser): New method.
        (run): Likewise.
        (main): Use 'run'.
        * tools/gnu/classpath/tools/getopt/FileArgumentCallback.java
        (notifyFile): Throws OptionException.

Index: tools/gnu/classpath/tools/getopt/FileArgumentCallback.java
===================================================================
RCS file: 
/cvsroot/classpath/classpath/tools/gnu/classpath/tools/getopt/FileArgumentCallback.java,v
retrieving revision 1.1
diff -u -r1.1 FileArgumentCallback.java
--- tools/gnu/classpath/tools/getopt/FileArgumentCallback.java  8 May 2006 
18:38:21 -0000       1.1
+++ tools/gnu/classpath/tools/getopt/FileArgumentCallback.java  20 May 2006 
22:08:39 -0000
@@ -57,5 +57,6 @@
    * 
    * @param fileArgument the file name
    */
-  public abstract void notifyFile(String fileArgument);
+  public abstract void notifyFile(String fileArgument)
+    throws OptionException;
 }
Index: tools/gnu/classpath/tools/native2ascii/Native2ASCII.java
===================================================================
RCS file: 
/cvsroot/classpath/classpath/tools/gnu/classpath/tools/native2ascii/Native2ASCII.java,v
retrieving revision 1.1
diff -u -r1.1 Native2ASCII.java
--- tools/gnu/classpath/tools/native2ascii/Native2ASCII.java    20 May 2006 
21:20:20 -0000      1.1
+++ tools/gnu/classpath/tools/native2ascii/Native2ASCII.java    20 May 2006 
22:08:39 -0000
@@ -38,6 +38,12 @@
 
 package gnu.classpath.tools.native2ascii;
 
+import gnu.classpath.tools.getopt.ClasspathToolParser;
+import gnu.classpath.tools.getopt.FileArgumentCallback;
+import gnu.classpath.tools.getopt.Option;
+import gnu.classpath.tools.getopt.OptionException;
+import gnu.classpath.tools.getopt.Parser;
+
 import java.io.BufferedReader;
 import java.io.BufferedWriter;
 import java.io.FileInputStream;
@@ -54,51 +60,72 @@
  */
 public class Native2ASCII
 {
-  public static void main(String[] args)
+  // Input file.
+  String input;
+  // Output file.
+  String output;
+  // Encoding to use.
+  String encoding;
+  // True for reverse operation.
+  boolean reversed;
+
+  private class HandleFile extends FileArgumentCallback
+  {
+    public HandleFile()
+    {
+    }
+
+    public void notifyFile(String fileArgument)
+      throws OptionException
+    {
+      if (input == null)
+        input = fileArgument;
+      else if (output == null)
+        output = fileArgument;
+      else
+        throw new 
OptionException(Messages.getString("Native2ASCII.TooManyFiles")); //$NON-NLS-1$
+    }
+  }
+
+  private Parser createParser()
   {
-    String encoding = System.getProperty("file.encoding");
-    String input = null;
-    String output = null;
-    for (int i = 0; i < args.length; i++)
+    Parser result = new ClasspathToolParser("native2ascii", true); 
//$NON-NLS-1$
+    result.setHeader(Messages.getString("Native2ASCII.Usage")); //$NON-NLS-1$
+
+    result.add(new Option("encoding", 
Messages.getString("Native2ASCII.EncodingHelp"), 
Messages.getString("Native2ASCII.EncodingArgName")) //$NON-NLS-1$ //$NON-NLS-2$ 
//$NON-NLS-3$
+    {
+      public void parsed(String argument) throws OptionException
       {
-        if (args[i].equals("-encoding"))
-          {
-            i++;
-            if (i >= args.length)
-              {
-                System.err.println("encoding is missing");
-              }
-            else
-              {
-                encoding = args[i];
-              }
-          }
-        else if (args[i].equals("-reverse") || args[i].startsWith("-J"))
-          {
-            System.err.println(args[i] + ": not supported");
-          }
-        else
-          {
-            if (input == null)
-              {
-                input = args[i];
-              }
-            else if (output == null)
-              {
-                output = args[i];
-              }
-            else
-              {
-                System.err.println(args[i] + ": ignored");
-              }
-          }
+        if (encoding != null)
+          throw new 
OptionException(Messages.getString("Native2ASCII.EncodingSpecified")); 
//$NON-NLS-1$
+        encoding = argument;
       }
+    });
+    result.add(new Option("reversed", 
Messages.getString("Native2ASCII.ReversedHelp")) //$NON-NLS-1$ //$NON-NLS-2$
+    {
+      public void parsed(String argument) throws OptionException
+      {
+        reversed = true;
+      }
+    });
+
+    return result;
+  }
+
+  private void run(String[] args)
+  {
+    Parser argParser = createParser();
+    argParser.parse(args, new HandleFile());
+
+    if (encoding == null)
+      encoding = System.getProperty("file.encoding"); //$NON-NLS-1$
     try
       {
         InputStream is = (input == null ? System.in
-            : new FileInputStream(input));
+                                        : new FileInputStream(input));
         OutputStream os = (output == null ? (OutputStream) System.out
-            : new FileOutputStream(output));
+                                          : new FileOutputStream(output));
+
         BufferedReader rdr = new BufferedReader(new InputStreamReader(is,
                                                                       
encoding));
         PrintWriter wtr = new PrintWriter(
@@ -115,17 +142,26 @@
             for (int i = 0; i < s.length(); i++)
               {
                 char c = s.charAt(i);
-                if ((int)c <= 127)
+                if (reversed
+                    && i + 6 < s.length()
+                    && s.charAt(i) == '\\'
+                    && s.charAt(i + 1) == 'u')
+                  {
+                    int num = Integer.parseInt(s.substring(i + 2, i + 6), 16);
+                    sb.append((char) num);
+                    i += 5;
+                  }
+                else if ((int)c <= 127 || reversed)
                   {
                     sb.append(c);
                   }
                 else
                   {
-                    sb.append("\\u");
+                    sb.append("\\u"); //$NON-NLS-1$
                     if ((int)c <= 0xff)
-                      sb.append("00");
+                      sb.append("00"); //$NON-NLS-1$
                     else if ((int)c <= 0xfff)
-                      sb.append("0");
+                      sb.append("0"); //$NON-NLS-1$
                     sb.append(Integer.toHexString((int) c));
                   }
               }
@@ -140,4 +176,10 @@
         e.printStackTrace();
       }
   }
+
+  public static void main(String[] args)
+  {
+    new Native2ASCII().run(args);
+    String encoding = System.getProperty("file.encoding"); //$NON-NLS-1$
+  }
 }
Index: .settings/org.eclipse.core.resources.prefs
===================================================================
RCS file: .settings/org.eclipse.core.resources.prefs
diff -N .settings/org.eclipse.core.resources.prefs
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ .settings/org.eclipse.core.resources.prefs  1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,3 @@
+#Sat May 20 16:03:01 MDT 2006
+eclipse.preferences.version=1
+encoding//resource/gnu/classpath/tools/native2ascii/messages.properties=8859_1
Index: resource/gnu/classpath/tools/native2ascii/messages.properties
===================================================================
RCS file: resource/gnu/classpath/tools/native2ascii/messages.properties
diff -N resource/gnu/classpath/tools/native2ascii/messages.properties
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ resource/gnu/classpath/tools/native2ascii/messages.properties       1 Jan 
1970 00:00:00 -0000
@@ -0,0 +1,43 @@
+# messages.properties -- English language messages
+# Copyright (C) 2006  Free Software Foundation, Inc.
+#
+# This file is part of GNU Classpath.
+#
+# GNU Classpath is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# GNU Classpath is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Classpath; see the file COPYING.  If not, write to the
+# Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 USA.
+#
+# Linking this library statically or dynamically with other modules is
+# making a combined work based on this library.  Thus, the terms and
+# conditions of the GNU General Public License cover the whole
+# combination.
+#
+# As a special exception, the copyright holders of this library give you
+# permission to link this library with independent modules to produce an
+# executable, regardless of the license terms of these independent
+# modules, and to copy and distribute the resulting executable under
+# terms of your choice, provided that you also meet, for each linked
+# independent module, the terms and conditions of the license of that
+# module.  An independent module is a module which is not derived from
+# or based on this library.  If you modify this library, you may extend
+# this exception to your version of the library, but you are not
+# obligated to do so.  If you do not wish to do so, delete this
+# exception statement from your version.
+
+Native2ASCII.TooManyFiles=too many files specified
+Native2ASCII.Usage=Usage: native2ascii [OPTIONS]... [INPUTFILE [OUTPUTFILE]]
+Native2ASCII.EncodingHelp=encoding to use
+Native2ASCII.EncodingArgName=NAME
+Native2ASCII.EncodingSpecified=encoding already specified
+Native2ASCII.ReversedHelp=convert from encoding to native
Index: tools/gnu/classpath/tools/native2ascii/Messages.java
===================================================================
RCS file: tools/gnu/classpath/tools/native2ascii/Messages.java
diff -N tools/gnu/classpath/tools/native2ascii/Messages.java
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ tools/gnu/classpath/tools/native2ascii/Messages.java        1 Jan 1970 
00:00:00 -0000
@@ -0,0 +1,67 @@
+/* Messages.java -- translation support for native2ascii
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+ This file is part of GNU Classpath.
+
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+
+
+package gnu.classpath.tools.native2ascii;
+
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+public class Messages
+{
+  private static final String BUNDLE_NAME
+    = "gnu.classpath.tools.native2ascii.messages"; //$NON-NLS-1$
+
+  private static final ResourceBundle RESOURCE_BUNDLE
+    = ResourceBundle.getBundle(BUNDLE_NAME);
+
+  private Messages()
+  {
+  }
+
+  public static String getString(String key)
+  {
+    try
+      {
+        return RESOURCE_BUNDLE.getString(key);
+      }
+    catch (MissingResourceException e)
+      {
+        return '!' + key + '!';
+      }
+  }
+}

Reply via email to