]> gitweb.fperrin.net Git - Dictionary.git/blob - jars/icu4j-4_4_2-src/tools/misc/src/com/ibm/icu/dev/tool/layout/ShapingTypeBuilder.java
go
[Dictionary.git] / jars / icu4j-4_4_2-src / tools / misc / src / com / ibm / icu / dev / tool / layout / ShapingTypeBuilder.java
1 /*\r
2  *******************************************************************************\r
3  * Copyright (C) 1996-2005, International Business Machines Corporation and    *\r
4  * others. All Rights Reserved.                                                *\r
5  *******************************************************************************\r
6  *\r
7  */\r
8 \r
9 package com.ibm.icu.dev.tool.layout;\r
10 \r
11 import java.io.PrintStream;\r
12 \r
13 import com.ibm.icu.lang.UCharacter;\r
14 import com.ibm.icu.lang.UProperty;\r
15 import com.ibm.icu.text.UnicodeSet;\r
16 \r
17 /**\r
18  * @author emader\r
19  *\r
20  * TODO To change the template for this generated type comment go to\r
21  * Window - Preferences - Java - Code Style - Code Templates\r
22  */\r
23 public class ShapingTypeBuilder extends OpenTypeTableWriter\r
24 {\r
25     private ClassTable classTable;\r
26     \r
27     public ShapingTypeBuilder()\r
28     {\r
29         classTable = new ClassTable();\r
30     }\r
31     \r
32     public void writeTable(PrintStream output)\r
33     {\r
34         classTable.writeClassTable(this);\r
35         output.println("const le_uint8 ArabicShaping::shapingTypeTable[] = {");\r
36         \r
37         dumpTable(output, 8);\r
38         output.println("};\n");\r
39     }\r
40     \r
41     // TODO: The UnicodeSet is constrained to the BMP because the ClassTable data structure can\r
42     // only handle 16-bit entries. This is probably OK as long as there aren't any joining scripts\r
43     // outside of the BMP...\r
44     public void buildShapingTypes(String filename)\r
45     {\r
46         UnicodeSet shapingTypes = new UnicodeSet("[[\\P{Joining_Type=Non_Joining}] & [\\u0000-\\uFFFF]]");\r
47         int count = shapingTypes.size();\r
48         \r
49         System.out.println("There are " + count + " characters with a joining type.");\r
50         \r
51         for(int i = 0; i < count; i += 1) {\r
52             int ch = shapingTypes.charAt(i);\r
53             \r
54             classTable.addMapping(ch, UCharacter.getIntPropertyValue(ch, UProperty.JOINING_TYPE));\r
55         }\r
56         \r
57         LigatureModuleWriter writer = new LigatureModuleWriter();\r
58         String[] includeFiles = {"LETypes.h", "ArabicShaping.h"};        \r
59         \r
60         writer.openFile(filename);\r
61         writer.writeHeader(null, includeFiles);\r
62         writer.writeTable(this);\r
63         writer.writeTrailer();\r
64         writer.closeFile();\r
65     }\r
66     \r
67     public static void main(String[] args)\r
68     {\r
69         ShapingTypeBuilder stb = new ShapingTypeBuilder();\r
70         \r
71         stb.buildShapingTypes(args[0]);\r
72     }\r
73 }\r