blob: b6d427a0b97017a99594b06a4e37e4e51c7de252 [file] [log] [blame]
/*
*******************************************************************************
* 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]);
}
}