blob: 04d43d2618b62348adfa70c3a78f26167710e229 [file] [log] [blame]
/**
*******************************************************************************
* Copyright (C) 2001-2004, International Business Machines Corporation and *
* others. All Rights Reserved. *
*******************************************************************************
*/
package com.ibm.icu.dev.tool.translit;
import com.ibm.icu.text.*;
import java.io.*;
/**
* A command-line interface to the ICU4J transliterators.
* @author Alan Liu
*/
public class Trans {
public static void main(String[] args) throws Exception {
boolean isHTML = false;
int pos = 0;
String transName = null; // first untagged string is this
String inText = null; // all other untagged strings are this
String inName = null;
String outName = null;
while (pos < args.length) {
if (args[pos].equals("-html")) {
isHTML = true;
} else if (args[pos].equals("-i")) {
if (++pos == args.length) usage();
inName = args[pos];
} else if (args[pos].equals("-o")) {
if (++pos == args.length) usage();
outName = args[pos];
} else if (transName == null) {
transName = args[pos];
} else {
if (inText == null) {
inText = args[pos];
} else {
inText = inText + " " + args[pos];
}
}
++pos;
}
if (inText != null && inName != null) {
usage();
}
Transliterator trans = Transliterator.getInstance(transName);
BufferedReader in = null;
if (inName != null) {
in = new BufferedReader(new InputStreamReader(new FileInputStream(inName), "UTF8"));
}
PrintWriter out = null;
if (outName != null) {
out = new PrintWriter(new OutputStreamWriter(new FileOutputStream(outName), "UTF8"));
} else {
out = new PrintWriter(System.out);
}
trans(trans, inText, in, out, isHTML);
out.close();
}
static void trans(Transliterator trans, String inText,
BufferedReader in, PrintWriter out, boolean isHTML) throws IOException {
boolean inTag = false; // If true, we are within a <tag>
for (;;) {
String line = null;
if (inText != null) {
line = inText;
inText = null;
} else if (in != null) {
line = in.readLine();
}
if (line == null) {
break;
}
if (isHTML) {
// Pass tags between < and > unchanged
StringBuffer buf = new StringBuffer();
int right = -1;
if (inTag) {
right = line.indexOf('>');
if (right < 0) {
right = line.length()-1;
}
buf.append(line.substring(0, right+1));
if (DEBUG) System.out.println("*S:" + line.substring(0, right+1));
inTag = false;
}
for (;;) {
int left = line.indexOf('<', right+1);
if (left < 0) {
if (right < line.length()-1) {
buf.append(trans.transliterate(line.substring(right+1)));
if (DEBUG) System.out.println("T:" + line.substring(right+1));
}
break;
}
// Append transliterated segment right+1..left-1
buf.append(trans.transliterate(line.substring(right+1, left)));
if (DEBUG) System.out.println("T:" + line.substring(right+1, left));
right = line.indexOf('>', left+1);
if (right < 0) {
inTag = true;
buf.append(line.substring(left));
if (DEBUG) System.out.println("S:" + line.substring(left));
break;
}
buf.append(line.substring(left, right+1));
if (DEBUG) System.out.println("S:" + line.substring(left, right+1));
}
line = buf.toString();
} else {
line = trans.transliterate(line);
}
out.println(line);
}
}
static final boolean DEBUG = false;
/**
* Emit usage and die.
*/
static void usage() {
System.out.println("Usage: java com.ibm.icu.dev.tool.translit.Trans [-html] <trans> ( <input> | -i <infile>) [ -o <outfile> ]");
System.out.println("<trans> Name of transliterator");
System.out.println("<input> Text to transliterate");
System.out.println("<infile> Name of input file");
System.out.println("<outfile> Name of output file");
System.out.println("-html Only transliterate text outside of <tags>");
System.out.println("Input may come from the command line or a file.\n");
System.out.println("Ouput may go to stdout or a file.\n");
System.exit(0);
}
}