summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorTom Tromey <tromey@redhat.com>2006-05-20 22:10:31 +0000
committerTom Tromey <tromey@redhat.com>2006-05-20 22:10:31 +0000
commitde688890b249d22880841a6568c528659082bf2d (patch)
tree3ee73dc3b6046d7d2927e9447897d56e5a63b940 /tools
parent5585f7c7cd79ec7c58e985ce2cc49e45fe5371b7 (diff)
downloadclasspath-de688890b249d22880841a6568c528659082bf2d.tar.gz
* 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.
Diffstat (limited to 'tools')
-rw-r--r--tools/gnu/classpath/tools/getopt/FileArgumentCallback.java3
-rw-r--r--tools/gnu/classpath/tools/native2ascii/Messages.java67
-rw-r--r--tools/gnu/classpath/tools/native2ascii/Native2ASCII.java126
3 files changed, 153 insertions, 43 deletions
diff --git a/tools/gnu/classpath/tools/getopt/FileArgumentCallback.java b/tools/gnu/classpath/tools/getopt/FileArgumentCallback.java
index 0c44745c9..455389127 100644
--- a/tools/gnu/classpath/tools/getopt/FileArgumentCallback.java
+++ b/tools/gnu/classpath/tools/getopt/FileArgumentCallback.java
@@ -57,5 +57,6 @@ public abstract class FileArgumentCallback
*
* @param fileArgument the file name
*/
- public abstract void notifyFile(String fileArgument);
+ public abstract void notifyFile(String fileArgument)
+ throws OptionException;
}
diff --git a/tools/gnu/classpath/tools/native2ascii/Messages.java b/tools/gnu/classpath/tools/native2ascii/Messages.java
new file mode 100644
index 000000000..4c6bae4dc
--- /dev/null
+++ b/tools/gnu/classpath/tools/native2ascii/Messages.java
@@ -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 + '!';
+ }
+ }
+}
diff --git a/tools/gnu/classpath/tools/native2ascii/Native2ASCII.java b/tools/gnu/classpath/tools/native2ascii/Native2ASCII.java
index 21ac0141f..9508c103e 100644
--- a/tools/gnu/classpath/tools/native2ascii/Native2ASCII.java
+++ b/tools/gnu/classpath/tools/native2ascii/Native2ASCII.java
@@ -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 @@ import java.io.PrintWriter;
*/
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 @@ public class Native2ASCII
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 @@ public class Native2ASCII
e.printStackTrace();
}
}
+
+ public static void main(String[] args)
+ {
+ new Native2ASCII().run(args);
+ String encoding = System.getProperty("file.encoding"); //$NON-NLS-1$
+ }
}