2 *******************************************************************************
\r
3 * Copyright (C) 2001-2010, International Business Machines Corporation and *
\r
4 * others. All Rights Reserved. *
\r
5 *******************************************************************************
\r
7 package com.ibm.icu.dev.tool.translit;
\r
9 import java.io.BufferedReader;
\r
10 import java.io.FileInputStream;
\r
11 import java.io.FileOutputStream;
\r
12 import java.io.IOException;
\r
13 import java.io.InputStreamReader;
\r
14 import java.io.OutputStreamWriter;
\r
15 import java.io.PrintWriter;
\r
17 import com.ibm.icu.text.Transliterator;
\r
20 * A command-line interface to the ICU4J transliterators.
\r
23 public class Trans {
\r
25 public static void main(String[] args) throws Exception {
\r
26 boolean isHTML = false;
\r
29 String transName = null; // first untagged string is this
\r
30 String inText = null; // all other untagged strings are this
\r
31 String inName = null;
\r
32 String outName = null;
\r
34 while (pos < args.length) {
\r
35 if (args[pos].equals("-html")) {
\r
37 } else if (args[pos].equals("-i")) {
\r
38 if (++pos == args.length) usage();
\r
40 } else if (args[pos].equals("-o")) {
\r
41 if (++pos == args.length) usage();
\r
42 outName = args[pos];
\r
43 } else if (transName == null) {
\r
44 transName = args[pos];
\r
46 if (inText == null) {
\r
49 inText = inText + " " + args[pos];
\r
55 if (inText != null && inName != null) {
\r
59 Transliterator trans = Transliterator.getInstance(transName);
\r
60 BufferedReader in = null;
\r
61 if (inName != null) {
\r
62 in = new BufferedReader(new InputStreamReader(new FileInputStream(inName), "UTF8"));
\r
64 PrintWriter out = null;
\r
65 if (outName != null) {
\r
66 out = new PrintWriter(new OutputStreamWriter(new FileOutputStream(outName), "UTF8"));
\r
68 out = new PrintWriter(System.out);
\r
70 trans(trans, inText, in, out, isHTML);
\r
74 static void trans(Transliterator trans, String inText,
\r
75 BufferedReader in, PrintWriter out, boolean isHTML) throws IOException {
\r
76 boolean inTag = false; // If true, we are within a <tag>
\r
79 if (inText != null) {
\r
82 } else if (in != null) {
\r
83 line = in.readLine();
\r
89 // Pass tags between < and > unchanged
\r
90 StringBuffer buf = new StringBuffer();
\r
93 right = line.indexOf('>');
\r
95 right = line.length()-1;
\r
97 buf.append(line.substring(0, right+1));
\r
98 if (DEBUG) System.out.println("*S:" + line.substring(0, right+1));
\r
102 int left = line.indexOf('<', right+1);
\r
104 if (right < line.length()-1) {
\r
105 buf.append(trans.transliterate(line.substring(right+1)));
\r
106 if (DEBUG) System.out.println("T:" + line.substring(right+1));
\r
110 // Append transliterated segment right+1..left-1
\r
111 buf.append(trans.transliterate(line.substring(right+1, left)));
\r
112 if (DEBUG) System.out.println("T:" + line.substring(right+1, left));
\r
113 right = line.indexOf('>', left+1);
\r
116 buf.append(line.substring(left));
\r
117 if (DEBUG) System.out.println("S:" + line.substring(left));
\r
120 buf.append(line.substring(left, right+1));
\r
121 if (DEBUG) System.out.println("S:" + line.substring(left, right+1));
\r
123 line = buf.toString();
\r
125 line = trans.transliterate(line);
\r
131 static final boolean DEBUG = false;
\r
134 * Emit usage and die.
\r
136 static void usage() {
\r
137 System.out.println("Usage: java com.ibm.icu.dev.tool.translit.Trans [-html] <trans> ( <input> | -i <infile>) [ -o <outfile> ]");
\r
138 System.out.println("<trans> Name of transliterator");
\r
139 System.out.println("<input> Text to transliterate");
\r
140 System.out.println("<infile> Name of input file");
\r
141 System.out.println("<outfile> Name of output file");
\r
142 System.out.println("-html Only transliterate text outside of <tags>");
\r
143 System.out.println("Input may come from the command line or a file.\n");
\r
144 System.out.println("Ouput may go to stdout or a file.\n");
\r