2 *******************************************************************************
\r
3 * Copyright (C) 1996-2005, International Business Machines Corporation and *
\r
4 * others. All Rights Reserved. *
\r
5 *******************************************************************************
\r
9 package com.ibm.icu.dev.tool.layout;
\r
11 import java.io.PrintStream;
\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
20 * TODO To change the template for this generated type comment go to
\r
21 * Window - Preferences - Java - Code Style - Code Templates
\r
23 public class ShapingTypeBuilder extends OpenTypeTableWriter
\r
25 private ClassTable classTable;
\r
27 public ShapingTypeBuilder()
\r
29 classTable = new ClassTable();
\r
32 public void writeTable(PrintStream output)
\r
34 classTable.writeClassTable(this);
\r
35 output.println("const le_uint8 ArabicShaping::shapingTypeTable[] = {");
\r
37 dumpTable(output, 8);
\r
38 output.println("};\n");
\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
46 UnicodeSet shapingTypes = new UnicodeSet("[[\\P{Joining_Type=Non_Joining}] & [\\u0000-\\uFFFF]]");
\r
47 int count = shapingTypes.size();
\r
49 System.out.println("There are " + count + " characters with a joining type.");
\r
51 for(int i = 0; i < count; i += 1) {
\r
52 int ch = shapingTypes.charAt(i);
\r
54 classTable.addMapping(ch, UCharacter.getIntPropertyValue(ch, UProperty.JOINING_TYPE));
\r
57 LigatureModuleWriter writer = new LigatureModuleWriter();
\r
58 String[] includeFiles = {"LETypes.h", "ArabicShaping.h"};
\r
60 writer.openFile(filename);
\r
61 writer.writeHeader(null, includeFiles);
\r
62 writer.writeTable(this);
\r
63 writer.writeTrailer();
\r
67 public static void main(String[] args)
\r
69 ShapingTypeBuilder stb = new ShapingTypeBuilder();
\r
71 stb.buildShapingTypes(args[0]);
\r