]> gitweb.fperrin.net Git - Dictionary.git/blob - jars/icu4j-4_2_1-src/src/com/ibm/icu/dev/tool/translit/Trans.java
icu4jsrc
[Dictionary.git] / jars / icu4j-4_2_1-src / src / com / ibm / icu / dev / tool / translit / Trans.java
1 /**\r
2  *******************************************************************************\r
3  * Copyright (C) 2001-2004, International Business Machines Corporation and    *\r
4  * others. All Rights Reserved.                                                *\r
5  *******************************************************************************\r
6  */\r
7 package com.ibm.icu.dev.tool.translit;\r
8 \r
9 import com.ibm.icu.text.*;\r
10 import java.io.*;\r
11 \r
12 /**\r
13  * A command-line interface to the ICU4J transliterators.\r
14  * @author Alan Liu\r
15  */\r
16 public class Trans {\r
17 \r
18     public static void main(String[] args) throws Exception {\r
19         boolean isHTML = false;\r
20         int pos = 0;\r
21 \r
22         String transName = null; // first untagged string is this\r
23         String inText = null; // all other untagged strings are this\r
24         String inName = null;\r
25         String outName = null;\r
26 \r
27         while (pos < args.length) {\r
28             if (args[pos].equals("-html")) {\r
29                 isHTML = true;\r
30             } else if (args[pos].equals("-i")) {\r
31                 if (++pos == args.length) usage();\r
32                 inName = args[pos];\r
33             } else if (args[pos].equals("-o")) {\r
34                 if (++pos == args.length) usage();\r
35                 outName = args[pos];\r
36             } else if (transName == null) {\r
37                 transName = args[pos];\r
38             } else {\r
39                 if (inText == null) {\r
40                     inText = args[pos];\r
41                 } else {\r
42                     inText = inText + " " + args[pos];\r
43                 }\r
44             }\r
45             ++pos;\r
46         }\r
47 \r
48         if (inText != null && inName != null) {\r
49             usage();\r
50         }\r
51 \r
52         Transliterator trans = Transliterator.getInstance(transName);\r
53         BufferedReader in = null;\r
54         if (inName != null) {\r
55             in = new BufferedReader(new InputStreamReader(new FileInputStream(inName), "UTF8"));\r
56         }\r
57         PrintWriter out = null;\r
58         if (outName != null) {\r
59             out = new PrintWriter(new OutputStreamWriter(new FileOutputStream(outName), "UTF8"));\r
60         } else {\r
61             out = new PrintWriter(System.out);\r
62         }\r
63         trans(trans, inText, in, out, isHTML);\r
64         out.close();\r
65     }\r
66 \r
67     static void trans(Transliterator trans, String inText,\r
68                       BufferedReader in, PrintWriter out, boolean isHTML) throws IOException {\r
69         boolean inTag = false; // If true, we are within a <tag>\r
70         for (;;) {\r
71             String line = null;\r
72             if (inText != null) {\r
73                 line = inText;\r
74                 inText = null;\r
75             } else if (in != null) {\r
76                 line = in.readLine();\r
77             }\r
78             if (line == null) {\r
79                 break;\r
80             }\r
81             if (isHTML) {\r
82                 // Pass tags between < and > unchanged\r
83                 StringBuffer buf = new StringBuffer();\r
84                 int right = -1;\r
85                 if (inTag) {\r
86                     right = line.indexOf('>');\r
87                     if (right < 0) {\r
88                         right = line.length()-1;\r
89                     }\r
90                     buf.append(line.substring(0, right+1));\r
91                     if (DEBUG) System.out.println("*S:" + line.substring(0, right+1));\r
92                     inTag = false;\r
93                 }\r
94                 for (;;) {\r
95                     int left = line.indexOf('<', right+1);\r
96                     if (left < 0) {\r
97                         if (right < line.length()-1) {\r
98                             buf.append(trans.transliterate(line.substring(right+1)));\r
99                             if (DEBUG) System.out.println("T:" + line.substring(right+1));\r
100                         }\r
101                         break;\r
102                     }\r
103                     // Append transliterated segment right+1..left-1\r
104                     buf.append(trans.transliterate(line.substring(right+1, left)));\r
105                     if (DEBUG) System.out.println("T:" + line.substring(right+1, left));\r
106                     right = line.indexOf('>', left+1);\r
107                     if (right < 0) {\r
108                         inTag = true;\r
109                         buf.append(line.substring(left));\r
110                         if (DEBUG) System.out.println("S:" + line.substring(left));\r
111                         break;\r
112                     }\r
113                     buf.append(line.substring(left, right+1));\r
114                     if (DEBUG) System.out.println("S:" + line.substring(left, right+1));\r
115                 }\r
116                 line = buf.toString();\r
117             } else {\r
118                 line = trans.transliterate(line);\r
119             }\r
120             out.println(line);\r
121         }\r
122     }\r
123 \r
124     static final boolean DEBUG = false;\r
125 \r
126     /**\r
127      * Emit usage and die.\r
128      */\r
129     static void usage() {\r
130         System.out.println("Usage: java com.ibm.icu.dev.tool.translit.Trans [-html] <trans> ( <input> | -i <infile>) [ -o <outfile> ]");\r
131         System.out.println("<trans>   Name of transliterator");\r
132         System.out.println("<input>   Text to transliterate");\r
133         System.out.println("<infile>  Name of input file");\r
134         System.out.println("<outfile> Name of output file");\r
135         System.out.println("-html     Only transliterate text outside of <tags>");\r
136         System.out.println("Input may come from the command line or a file.\n");\r
137         System.out.println("Ouput may go to stdout or a file.\n");\r
138         System.exit(0);\r
139     }\r
140 }\r