diff options
author | Tom Tromey <tromey@redhat.com> | 2006-05-20 22:10:31 +0000 |
---|---|---|
committer | Tom Tromey <tromey@redhat.com> | 2006-05-20 22:10:31 +0000 |
commit | de688890b249d22880841a6568c528659082bf2d (patch) | |
tree | 3ee73dc3b6046d7d2927e9447897d56e5a63b940 /tools | |
parent | 5585f7c7cd79ec7c58e985ce2cc49e45fe5371b7 (diff) | |
download | classpath-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')
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$ + } } |