]> gitweb.fperrin.net Git - Dictionary.git/blob - jars/icu4j-4_4_2-src/tools/misc/src/com/ibm/icu/dev/tool/translit/Trans.java
go
[Dictionary.git] / jars / icu4j-4_4_2-src / tools / misc / src / com / ibm / icu / dev / tool / translit / Trans.java
1 /**\r
2  *******************************************************************************\r
3  * Copyright (C) 2001-2010, 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 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
16 \r
17 import com.ibm.icu.text.Transliterator;\r
18 \r
19 /**\r
20  * A command-line interface to the ICU4J transliterators.\r
21  * @author Alan Liu\r
22  */\r
23 public class Trans {\r
24 \r
25     public static void main(String[] args) throws Exception {\r
26         boolean isHTML = false;\r
27         int pos = 0;\r
28 \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
33 \r
34         while (pos < args.length) {\r
35             if (args[pos].equals("-html")) {\r
36                 isHTML = true;\r
37             } else if (args[pos].equals("-i")) {\r
38                 if (++pos == args.length) usage();\r
39                 inName = args[pos];\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
45             } else {\r
46                 if (inText == null) {\r
47                     inText = args[pos];\r
48                 } else {\r
49                     inText = inText + " " + args[pos];\r
50                 }\r
51             }\r
52             ++pos;\r
53         }\r
54 \r
55         if (inText != null && inName != null) {\r
56             usage();\r
57         }\r
58 \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
63         }\r
64         PrintWriter out = null;\r
65         if (outName != null) {\r
66             out = new PrintWriter(new OutputStreamWriter(new FileOutputStream(outName), "UTF8"));\r
67         } else {\r
68             out = new PrintWriter(System.out);\r
69         }\r
70         trans(trans, inText, in, out, isHTML);\r
71         out.close();\r
72     }\r
73 \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
77         for (;;) {\r
78             String line = null;\r
79             if (inText != null) {\r
80                 line = inText;\r
81                 inText = null;\r
82             } else if (in != null) {\r
83                 line = in.readLine();\r
84             }\r
85             if (line == null) {\r
86                 break;\r
87             }\r
88             if (isHTML) {\r
89                 // Pass tags between < and > unchanged\r
90                 StringBuffer buf = new StringBuffer();\r
91                 int right = -1;\r
92                 if (inTag) {\r
93                     right = line.indexOf('>');\r
94                     if (right < 0) {\r
95                         right = line.length()-1;\r
96                     }\r
97                     buf.append(line.substring(0, right+1));\r
98                     if (DEBUG) System.out.println("*S:" + line.substring(0, right+1));\r
99                     inTag = false;\r
100                 }\r
101                 for (;;) {\r
102                     int left = line.indexOf('<', right+1);\r
103                     if (left < 0) {\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
107                         }\r
108                         break;\r
109                     }\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
114                     if (right < 0) {\r
115                         inTag = true;\r
116                         buf.append(line.substring(left));\r
117                         if (DEBUG) System.out.println("S:" + line.substring(left));\r
118                         break;\r
119                     }\r
120                     buf.append(line.substring(left, right+1));\r
121                     if (DEBUG) System.out.println("S:" + line.substring(left, right+1));\r
122                 }\r
123                 line = buf.toString();\r
124             } else {\r
125                 line = trans.transliterate(line);\r
126             }\r
127             out.println(line);\r
128         }\r
129     }\r
130 \r
131     static final boolean DEBUG = false;\r
132 \r
133     /**\r
134      * Emit usage and die.\r
135      */\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
145         System.exit(0);\r
146     }\r
147 }\r