]> gitweb.fperrin.net Git - Dictionary.git/blob - jars/icu4j-4_4_2-src/tools/misc/src/com/ibm/icu/dev/tool/translit/WriteIndicCharts.java
go
[Dictionary.git] / jars / icu4j-4_4_2-src / tools / misc / src / com / ibm / icu / dev / tool / translit / WriteIndicCharts.java
1 /**\r
2 *******************************************************************************\r
3 * Copyright (C) 2002-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.FileOutputStream;\r
10 import java.io.OutputStreamWriter;\r
11 import java.util.Hashtable;\r
12 \r
13 import com.ibm.icu.impl.Utility;\r
14 import com.ibm.icu.lang.UCharacter;\r
15 import com.ibm.icu.text.Transliterator;\r
16 import com.ibm.icu.text.UTF16;\r
17 import com.ibm.icu.text.UnicodeSet;\r
18 import com.ibm.icu.text.UnicodeSetIterator;\r
19 /**\r
20  * @author ram\r
21  *\r
22  * To change this generated comment edit the template variable "typecomment":\r
23  * Window>Preferences>Java>Templates.\r
24  * To enable and disable the creation of type comments go to\r
25  * Window>Preferences>Java>Code Generation.7F\r
26  */\r
27 public class WriteIndicCharts {\r
28     \r
29     public static void main(String[] args){\r
30         writeIICharts();\r
31     }\r
32    \r
33     \r
34     static String header =  "<html>\n" +\r
35                             "    <head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">"+\r
36                             "           Inter-Indic Transliteration Comparison chart"+\r
37                             "    </head>\n"+\r
38                             "    <body bgcolor=#FFFFFF>\n"+\r
39                             "         <table border=1 width=100% >\n"+\r
40                             "            <tr>\n"+\r
41                             "            <th width=9%>Inter-Indic</th>\n"+\r
42                             "            <th width=9%>Latin</th>\n"+\r
43                             "            <th width=9%>Devanagari</th>\n"+\r
44                             "            <th width=9%>Bengali</th>\n"+\r
45                             "            <th width=9%>Gurmukhi</th>\n"+\r
46                             "            <th width=9%>Gujarati</th>\n"+\r
47                             "            <th width=9%>Oriya</th>\n"+\r
48                             "            <th width=9%>Tamil</th>\n"+\r
49                             "            <th width=9%>Telugu</th>\n"+\r
50                             "            <th width=9%>Kannada</th>\n"+\r
51                             "            <th width=9%>Malayalam</th>\n"+\r
52                             "            </tr>\n";\r
53     static String footer =  "          </table>\n"+\r
54                             "    </body>\n" +\r
55                             "</html>\n";\r
56                    \r
57     static UnicodeSet deva = new UnicodeSet("[:deva:]"); \r
58     static UnicodeSet beng = new UnicodeSet("[:beng:]");\r
59     static UnicodeSet gujr = new UnicodeSet("[:gujr:]");\r
60     static UnicodeSet guru = new UnicodeSet("[:guru:]");\r
61     static UnicodeSet orya = new UnicodeSet("[:orya:]");\r
62     static UnicodeSet taml = new UnicodeSet("[:taml:]");\r
63     static UnicodeSet telu = new UnicodeSet("[:telu:]");\r
64     static UnicodeSet knda = new UnicodeSet("[:knda:]"); \r
65     static UnicodeSet mlym = new UnicodeSet("[:mlym:]");                      \r
66     static UnicodeSet inter= new UnicodeSet("[\uE000-\uE082]");\r
67     \r
68     public static void writeIICharts(){\r
69         try{\r
70             Transliterator t1 = Transliterator.getInstance("InterIndic-Bengali");    \r
71             Transliterator t2 = Transliterator.getInstance("InterIndic-Gurmukhi");\r
72             Transliterator t3 = Transliterator.getInstance("InterIndic-Gujarati");\r
73             Transliterator t4 = Transliterator.getInstance("InterIndic-Oriya");\r
74             Transliterator t5 = Transliterator.getInstance("InterIndic-Tamil");\r
75             Transliterator t6 = Transliterator.getInstance("InterIndic-Telugu");\r
76             Transliterator t7 = Transliterator.getInstance("InterIndic-Kannada");\r
77             Transliterator t8 = Transliterator.getInstance("InterIndic-Malayalam");\r
78             Transliterator t9 = Transliterator.getInstance("InterIndic-Devanagari");\r
79             Transliterator t10 = Transliterator.getInstance("InterIndic-Latin");\r
80             //UnicodeSetIterator sIter = new UnicodeSetIterator(deva);\r
81             \r
82             for(int i=0x00;i<=0x80;i++){\r
83                String[] arr =  new String[10];\r
84                arr[0]=UTF16.valueOf(i+ 0xE000);\r
85                table.put(UTF16.valueOf(i),arr);\r
86             }\r
87             \r
88             OutputStreamWriter os = new OutputStreamWriter(new FileOutputStream("comparison-chart.html"),"UTF-8");\r
89             \r
90             os.write(header);\r
91 \r
92             writeIICharts(t9,0x0900,1);\r
93             writeIICharts(t1,0x0980,2);        \r
94             writeIICharts(t2,0x0A00,3); \r
95             writeIICharts(t3,0x0A80,4); \r
96             writeIICharts(t4,0x0B00,5); \r
97             writeIICharts(t5,0x0B80,6); \r
98             writeIICharts(t6,0x0c00,7); \r
99             writeIICharts(t7,0x0C80,8); \r
100             writeIICharts(t8,0x0D00,9); \r
101 \r
102             for(int i=0x00;i<=0x80;i++){\r
103                 String[] temp = (String[])table.get(UTF16.valueOf(i));\r
104                 boolean write = false;\r
105                 for(int k=1;k<temp.length && temp[k]!=null;k++){\r
106                     if(UCharacter.getExtendedName(UTF16.charAt(temp[k],0)).indexOf("unassigned")<0 ||\r
107                        temp[k].indexOf(":UNASSIGNED")<0){\r
108                         write = true;\r
109                     }\r
110                 }\r
111                 if(write){\r
112                     os.write("        <tr>\n");\r
113                     for(int j=0; j<temp.length;j++){\r
114                         if(temp[j]!=null){\r
115                             boolean fallback=false;\r
116                             boolean unassigned=false;\r
117                             boolean unmapped = false;\r
118                             boolean consumed =false;\r
119                             String str = temp[j];\r
120                                                         \r
121                             if(temp[j].indexOf(":FALLBACK")>=0){\r
122                                 str = temp[j].substring(0,temp[j].indexOf(":"));\r
123                                 fallback=true;\r
124                                // os.write("            <td bgcolor=#FFFF00 align=center title=\""++"\">"+str+"<br><tt>"+Utility.hex(str)+"</tt>"+"</td>\n");\r
125                             }\r
126                             if(temp[j].indexOf(":UNASSIGNED")>=0){\r
127                                 str = temp[j].substring(0,temp[j].indexOf(":"));\r
128                                 unassigned=true;\r
129                             }\r
130                             \r
131                             if(temp[j].indexOf(":UNMAPPED")>=0){\r
132                                 str = temp[j].substring(0,temp[j].indexOf(":"));\r
133                                 unmapped=true;\r
134                             }\r
135                             if(temp[j].indexOf(":CONSUMED")>=0){\r
136                                 str = temp[j].substring(0,temp[j].indexOf(":"));\r
137                                 consumed=true;\r
138                             }\r
139                             \r
140                             String name;\r
141                             StringBuffer nameBuf=new StringBuffer(); \r
142                             for(int f=0; f<str.length();f++){\r
143                                 if(f>0){ nameBuf.append("+");}\r
144                                 nameBuf.append(UCharacter.getExtendedName(UTF16.charAt(str,f)));\r
145                             }\r
146                             name = nameBuf.toString();   \r
147                             if(fallback){\r
148 \r
149                                 if(UCharacter.getExtendedName(UTF16.charAt(str,0)).indexOf("unassigned")>0){\r
150                                     os.write("            <td  width=9% bgcolor=#BBBBFF align=center title=\""+name+"\">"+"&nbsp<br><tt>"+Utility.hex(str)+"</tt>"+"</td>\n");\r
151                                 }else{\r
152                                     os.write("            <td width=9% bgcolor=#BBBBFF align=center title=\""+name+"\">"+ str+"<br><tt>"+Utility.hex(str)+"</tt>"+"</td>\n");\r
153                                 }\r
154                             }else if(unmapped){\r
155                                 os.write("            <td bgcolor=#FF9999 align=center title=\""+name+"\">"+"&nbsp<br><tt>"+Utility.hex(str)+"</tt>"+"</td>\n");\r
156                             }else if(unassigned){\r
157                                 if(UCharacter.getExtendedName(UTF16.charAt(str,0)).indexOf("unassigned")>0){\r
158                                     os.write("            <td width=9% bgcolor=#00FFFF align=center title=\""+name+"\">"+"&nbsp<br><tt>"+Utility.hex(str)+"</tt>"+"</td>\n");\r
159                                 }else{\r
160                                     os.write("            <td width=9% bgcolor=#00FFFF align=center title=\""+name+"\">"+ str+"<br><tt>"+Utility.hex(str)+"</tt>"+"</td>\n");\r
161                                 }\r
162                             }else if(consumed){\r
163                                  if(UCharacter.getExtendedName(UTF16.charAt(str,0)).indexOf("unassigned")>0){\r
164                                     os.write("            <td width=9% bgcolor=#FFFF55 align=center title=\""+name+"\">"+"&nbsp<br><tt>"+Utility.hex(str)+"</tt>"+"</td>\n");\r
165                                 }else{\r
166                                     os.write("            <td width=9% bgcolor=#FFFF55 align=center title=\""+""+"\">"+"&nbsp<br><tt>"+Utility.hex(str)+"</tt>"+"</td>\n");\r
167                                 }\r
168                             }else if(name.indexOf("private")!=-1){\r
169                                 String s = t10.transliterate(str);\r
170                                 os.write("            <td width=9% bgcolor=#FFBBBB  align=center title=\""+name+"\">"+"&nbsp<br><tt>"+Utility.hex(str)+"</tt>"+"</td>\n");\r
171                                 if(!s.equals(str)){\r
172                                     os.write("            <td width=9%  bgcolor=#CCEEDD align=center>"+s +"</td>");\r
173                                 }else{\r
174                                     os.write("            <td width=9% bgcolor=#CCEEDD align=center>&nbsp;</td>");\r
175                                 }\r
176                             }else{\r
177                                os.write("            <td width=9% align=center title=\""+name+"\">"+ str+"<br><tt>"+Utility.hex(str)+"</tt>"+"</td>\n");\r
178                             } \r
179                         }else{\r
180                              os.write("           <td width=9% >&nbsp</td>\n");\r
181                         }\r
182                     }\r
183                     os.write("        </tr>\n");\r
184                 }\r
185             }\r
186             os.write(footer);\r
187             os.close();\r
188         }catch( Exception e){\r
189             e.printStackTrace();\r
190         }\r
191     }\r
192     public static void writeCharts(){\r
193         try{\r
194             Transliterator t1 = Transliterator.getInstance("InterIndic-Bengali");    \r
195             Transliterator t2 = Transliterator.getInstance("InterIndic-Gurmukhi");\r
196             Transliterator t3 = Transliterator.getInstance("InterIndic-Gujarati");\r
197             Transliterator t4 = Transliterator.getInstance("InterIndic-Oriya");\r
198             Transliterator t5 = Transliterator.getInstance("InterIndic-Tamil");\r
199             Transliterator t6 = Transliterator.getInstance("InterIndic-Telugu");\r
200             Transliterator t7 = Transliterator.getInstance("InterIndic-Kannada");\r
201             Transliterator t8 = Transliterator.getInstance("InterIndic-Malayalam");\r
202             Transliterator t9 = Transliterator.getInstance("InterIndic-Devanagari");\r
203             \r
204             //UnicodeSetIterator sIter = new UnicodeSetIterator(deva);\r
205             \r
206             for(int i=0x0900;i<=0x097F;i++){\r
207                String[] arr =  new String[10];\r
208                arr[0]=UTF16.valueOf((i&0xFF) + 0xE000);\r
209                table.put(UTF16.valueOf(i),arr);\r
210             }\r
211             \r
212             OutputStreamWriter os = new OutputStreamWriter(new FileOutputStream("comparison-chart.html"),"UTF-8");\r
213             \r
214             os.write(header);\r
215             /*\r
216             writeCharts(t1,beng,1);        \r
217             writeCharts(t2,guru,2); \r
218             writeCharts(t3,gujr,3); \r
219             writeCharts(t4,orya,4); \r
220             writeCharts(t5,taml,5); \r
221             writeCharts(t6,telu,6); \r
222             writeCharts(t7,knda,7); \r
223             writeCharts(t8,mlym,8); \r
224             */\r
225             /*\r
226             writeCharts(t9,0x0900,1);\r
227             writeCharts(t1,0x0980,2);        \r
228             writeCharts(t2,0x0A00,3); \r
229             writeCharts(t3,0x0A80,4); \r
230             writeCharts(t4,0x0B00,5); \r
231             writeCharts(t5,0x0B80,6); \r
232             writeCharts(t6,0x0c00,7); \r
233             writeCharts(t7,0x0C80,8); \r
234             writeCharts(t8,0x0D00,9); \r
235             */\r
236             writeIICharts(t9,0x0900,1);\r
237             writeIICharts(t1,0x0980,2);        \r
238             writeIICharts(t2,0x0A00,3); \r
239             writeIICharts(t3,0x0A80,4); \r
240             writeIICharts(t4,0x0B00,5); \r
241             writeIICharts(t5,0x0B80,6); \r
242             writeIICharts(t6,0x0c00,7); \r
243             writeIICharts(t7,0x0C80,8); \r
244             writeIICharts(t8,0x0D00,9); \r
245             for(int i=0x0900;i<=0x097F;i++){\r
246                 String[] temp = (String[])table.get(UTF16.valueOf(i));\r
247                 boolean write = false;\r
248                 for(int k=1;k<temp.length;k++){\r
249                     if(UCharacter.getExtendedName(UTF16.charAt(temp[k],0)).indexOf("unassigned")<0){\r
250                         write = true;\r
251                     }\r
252                 }\r
253                 if(write){\r
254                     os.write("        <tr>\n");\r
255                     for(int j=0; j<temp.length;j++){\r
256                         if(temp[j]!=null){\r
257                             boolean fallback=false;\r
258                             String str = temp[j];\r
259                             \r
260                             if(temp[j].indexOf(":FALLBACK")>=0){\r
261                                 str = temp[j].substring(0,temp[j].indexOf(":"));\r
262                                 fallback=true;\r
263                                // os.write("            <td bgcolor=#FFFF00 align=center title=\""++"\">"+str+"<br><tt>"+Utility.hex(str)+"</tt>"+"</td>\n");\r
264                             }\r
265                             String name = UCharacter.getExtendedName(UTF16.charAt(str,0));\r
266                             if(fallback){\r
267                                 os.write("            <td bgcolor=#BBBBFF align=center title=\""+name+"\">"+ str+"<br><tt>"+Utility.hex(str)+"</tt>"+"</td>\n");\r
268                             }else if(name.indexOf("unassigned")!=-1){\r
269                                 os.write("            <td bgcolor=#CCCCCC align=center title=\""+name+"\">"+"&nbsp<br><tt>"+Utility.hex(str)+"</tt>"+"</td>\n");\r
270                             }else if(name.indexOf("private")!=-1){\r
271 \r
272                                 \r
273                                 os.write("            <td bgcolor=#FFBBBB align=center title=\""+name+"\">"+"&nbsp<br><tt>"+Utility.hex(str)+"</tt>"+"</td>\n");\r
274 \r
275                             }else{\r
276                                os.write("            <td align=center title=\""+name+"\">"+ str+"<br><tt>"+Utility.hex(str)+"</tt>"+"</td>\n");\r
277                             } \r
278                         }else{\r
279                              os.write("           <td>&nbsp</td>\n");\r
280                         }\r
281                     }\r
282                     os.write("        </tr>\n");\r
283                 }\r
284             }\r
285             os.write(footer);\r
286             os.close();\r
287         }catch( Exception e){\r
288             e.printStackTrace();\r
289         }\r
290     }\r
291     static Hashtable table = new Hashtable();\r
292     static String getKey(int cp){\r
293         int delta = cp & 0xFF;\r
294         delta-= (delta>0x7f)? 0x80 : 0;\r
295         //delta+=0x0900;\r
296         return UTF16.valueOf(delta);\r
297     }\r
298     \r
299     public static void writeCharts(Transliterator trans, int start, int index){\r
300         \r
301         Transliterator inverse = trans.getInverse();\r
302         for(int i=0;i<=0x7f;i++){\r
303             String cp = UTF16.valueOf(start+i);\r
304             String s1 = inverse.transliterate(cp);\r
305             String s2 = trans.transliterate(s1);\r
306             \r
307             String[] arr = (String[])table.get(getKey(start+i));\r
308             if(cp.equals(s2)){\r
309                 arr[index] = s1;\r
310             }else{\r
311                 arr[index] = s1 + ":FALLBACK";\r
312             }\r
313         }\r
314     }\r
315     \r
316     public static void writeIICharts(Transliterator trans,int start, int index){\r
317         \r
318         Transliterator inverse = trans.getInverse();\r
319         UnicodeSetIterator iter = new UnicodeSetIterator(inter);\r
320         \r
321         while(iter.next()){\r
322             String cp =UTF16.valueOf(iter.codepoint);\r
323             String s1 = trans.transliterate(cp);\r
324             String s2 = inverse.transliterate(s1);\r
325             String[] arr = (String[])table.get(UTF16.valueOf(iter.codepoint&0xFF));\r
326             if(cp.equals(s1)){\r
327                 arr[index] = UTF16.valueOf(start+(((byte)iter.codepoint)&0xFF))+":UNASSIGNED";\r
328             }else if(cp.equals(s2)){\r
329                 arr[index] = s1;\r
330             }else if(s1.equals(s2)){\r
331                 if(s1.equals("")){\r
332                     arr[index] = UTF16.valueOf(start+(((byte)iter.codepoint)&0xFF))+":CONSUMED";\r
333                 }else{\r
334                     arr[index] = s1+ ":FALLBACK";\r
335                 }\r
336             } else{\r
337                 if(s2.equals("")){\r
338                     arr[index] = UTF16.valueOf(start+(((byte)iter.codepoint)&0xFF))+":CONSUMED";\r
339                 }else{\r
340                     arr[index] = s1+ ":FALLBACK";\r
341                 }\r
342             }\r
343         }\r
344     }\r
345     public static void writeCharts(Transliterator trans, UnicodeSet target, int index){\r
346         UnicodeSetIterator tIter = new UnicodeSetIterator(target);\r
347         Transliterator inverse = trans.getInverse();\r
348         while(tIter.next()){\r
349             String cp = UTF16.valueOf(tIter.codepoint);\r
350             String s1 = inverse.transliterate(cp);\r
351             String s2 = trans.transliterate(s1);\r
352             \r
353             String[] arr = (String[])table.get(getKey(tIter.codepoint));\r
354             if(cp.equals(s2)){\r
355                 arr[index] = cp;\r
356             }else{\r
357                 arr[index] = cp + ":FALLBACK";\r
358             }\r
359         }\r
360     }\r
361 }\r
362 \r