]> gitweb.fperrin.net Git - Dictionary.git/blob - jars/icu4j-4_4_2-src/tools/misc/src/com/ibm/icu/dev/tool/translit/SourceSet.java
go
[Dictionary.git] / jars / icu4j-4_4_2-src / tools / misc / src / com / ibm / icu / dev / tool / translit / SourceSet.java
1 /*\r
2 **********************************************************************\r
3 *   Copyright (c) 2001-2010, International Business Machines\r
4 *   Corporation and others.  All Rights Reserved.\r
5 **********************************************************************\r
6 *   Date        Name        Description\r
7 *   11/29/2001  aliu        Creation.\r
8 *   06/26/2002  aliu        Moved to com.ibm.icu.dev.tool.translit\r
9 **********************************************************************\r
10 */\r
11 package com.ibm.icu.dev.tool.translit;\r
12 import java.io.File;\r
13 import java.io.FileOutputStream;\r
14 import java.io.IOException;\r
15 import java.io.OutputStreamWriter;\r
16 import java.io.PrintWriter;\r
17 import java.util.Enumeration;\r
18 \r
19 import com.ibm.icu.text.Normalizer;\r
20 import com.ibm.icu.text.Transliterator;\r
21 import com.ibm.icu.text.UnicodeSet;\r
22 \r
23 /**\r
24  * Class that generates source set information for a transliterator.\r
25  * \r
26  * To run, use:\r
27  * \r
28  *   java com.ibm.icu.dev.tool.translit.SourceSet Latin-Katakana NFD lower\r
29  * \r
30  * Output is produced in the command console, and a file with more detail is also written.\r
31  * \r
32  * To see if it works, use:\r
33  * \r
34  *   java com.ibm.icu.dev.test.translit.TransliteratorTest -v -nothrow TestIncrementalProgress\r
35  * \r
36  * and\r
37  *  \r
38  *   java com.ibm.icu.dev.demo.translit.Demo\r
39  */\r
40 public class SourceSet {\r
41 \r
42     public static void main(String[] args) throws IOException {\r
43         if (args.length == 0) {\r
44             // Compute and display the source sets for all system\r
45             // transliterators.\r
46             for (Enumeration e = Transliterator.getAvailableIDs(); e.hasMoreElements(); ) {\r
47                 String ID = (String) e.nextElement();\r
48                 showSourceSet(ID, Normalizer.NONE, false);\r
49             }\r
50         } else {\r
51             // Usage: ID [NFKD | NFD] [lower]\r
52             Normalizer.Mode m = Normalizer.NONE;\r
53             boolean lowerFirst = false;\r
54             if (args.length >= 2) {\r
55                 if (args[1].equalsIgnoreCase("NFD")) {\r
56                     m = Normalizer.NFD;\r
57                 } else if (args[1].equalsIgnoreCase("NFKD")) {\r
58                     m = Normalizer.NFKD;\r
59                 } else {\r
60                     usage();\r
61                 }\r
62             }\r
63             if (args.length >= 3) {\r
64                 if (args[2].equalsIgnoreCase("lower")) {\r
65                     lowerFirst = true;\r
66                 } else {\r
67                     usage();\r
68                 }\r
69             }\r
70             if (args.length > 3) {\r
71                 usage();\r
72             }\r
73             showSourceSet(args[0], m, lowerFirst);\r
74         }\r
75     }\r
76 \r
77     static void showSourceSet(String ID, Normalizer.Mode m, boolean lowerFirst) throws IOException {\r
78         File f = new File("UnicodeSetClosure.txt");\r
79         String filename = f.getCanonicalFile().toString();\r
80         out = new PrintWriter(\r
81             new OutputStreamWriter(\r
82                 new FileOutputStream(filename), "UTF-8"));\r
83         out.print('\uFEFF'); // BOM\r
84         System.out.println();\r
85         System.out.println("Writing " + filename);\r
86         Transliterator t = Transliterator.getInstance(ID);\r
87         showSourceSetAux(t, m, lowerFirst, true);\r
88         showSourceSetAux(t.getInverse(), m, lowerFirst, false);\r
89         out.close();\r
90     }\r
91     \r
92     static PrintWriter out;\r
93     \r
94     static void showSourceSetAux(Transliterator t, Normalizer.Mode m, boolean lowerFirst, boolean forward) {\r
95         UnicodeSet sourceSet = t.getSourceSet();\r
96         if (m != Normalizer.NONE || lowerFirst) {\r
97             UnicodeSetClosure.close(sourceSet, m, lowerFirst);\r
98         }\r
99         System.out.println(t.getID() + ": " +\r
100                            sourceSet.toPattern(true));\r
101         out.println("# MINIMAL FILTER GENERATED FOR: " + t.getID() + (forward ? "" : " REVERSE"));\r
102         out.println(":: " \r
103             + (forward ? "" : "( ") \r
104             + sourceSet.toPattern(true) \r
105             + (forward ? "" : " )")\r
106             + " ;");\r
107         out.println("# Unicode: " + sourceSet.toPattern(false));\r
108         out.println();\r
109     }\r
110 \r
111     static void usage() {\r
112         System.err.println("Usage: ID [ NFD|NFKD [lower] ]");\r
113         System.exit(1);\r
114     }\r
115 }\r