/* ******************************************************************************* * Copyright (C) 1996-2005, International Business Machines Corporation and * * others. All Rights Reserved. * ******************************************************************************* * */ package com.ibm.icu.dev.tool.layout; import java.io.PrintStream; import com.ibm.icu.lang.UCharacter; import com.ibm.icu.lang.UProperty; import com.ibm.icu.text.UnicodeSet; /** * @author emader * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class ShapingTypeBuilder extends OpenTypeTableWriter { private ClassTable classTable; public ShapingTypeBuilder() { classTable = new ClassTable(); } public void writeTable(PrintStream output) { classTable.writeClassTable(this); output.println("const le_uint8 ArabicShaping::shapingTypeTable[] = {"); dumpTable(output, 8); output.println("};\n"); } // TODO: The UnicodeSet is constrained to the BMP because the ClassTable data structure can // only handle 16-bit entries. This is probably OK as long as there aren't any joining scripts // outside of the BMP... public void buildShapingTypes(String filename) { UnicodeSet shapingTypes = new UnicodeSet("[[\\P{Joining_Type=Non_Joining}] & [\\u0000-\\uFFFF]]"); int count = shapingTypes.size(); System.out.println("There are " + count + " characters with a joining type."); for(int i = 0; i < count; i += 1) { int ch = shapingTypes.charAt(i); classTable.addMapping(ch, UCharacter.getIntPropertyValue(ch, UProperty.JOINING_TYPE)); } LigatureModuleWriter writer = new LigatureModuleWriter(); String[] includeFiles = {"LETypes.h", "ArabicShaping.h"}; writer.openFile(filename); writer.writeHeader(null, includeFiles); writer.writeTable(this); writer.writeTrailer(); writer.closeFile(); } public static void main(String[] args) { ShapingTypeBuilder stb = new ShapingTypeBuilder(); stb.buildShapingTypes(args[0]); } }