ICU-4337 Generate mirrored character data from Unicode data.
X-SVN-Rev: 18304
This commit is contained in:
parent
fe031aafe0
commit
9c79cbef3f
@ -0,0 +1,97 @@
|
||||
/*
|
||||
*******************************************************************************
|
||||
* Copyright (C) 1996-2005, International Business Machines Corporation and *
|
||||
* others. All Rights Reserved. *
|
||||
*******************************************************************************
|
||||
*
|
||||
*/
|
||||
|
||||
package com.ibm.icu.dev.tool.layout;
|
||||
|
||||
import com.ibm.icu.impl.Utility;
|
||||
import com.ibm.icu.lang.UCharacter;
|
||||
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 BuildMirroringTables extends ModuleWriter
|
||||
{
|
||||
public BuildMirroringTables()
|
||||
{
|
||||
super();
|
||||
}
|
||||
|
||||
public void dump(String name, int[] array, int length, int valuesPerLine)
|
||||
{
|
||||
StringBuffer line = new StringBuffer(" ");
|
||||
|
||||
output.println("const LEUnicode32 DefaultCharMapper::" + name + "[] = {");
|
||||
|
||||
for (int i = 0; i < length; i += 1) {
|
||||
|
||||
if (i > 0 && i % valuesPerLine == 0) {
|
||||
output.println(line.toString());
|
||||
line.setLength(4);
|
||||
}
|
||||
|
||||
line.append("0x" + Utility.hex(array[i], 4));
|
||||
line.append(", ");
|
||||
}
|
||||
|
||||
line.setLength(line.length() - 2);
|
||||
|
||||
output.println(line.toString());
|
||||
output.println("};\n");
|
||||
}
|
||||
|
||||
public void writeMirroredDataFile(String filename)
|
||||
{
|
||||
UnicodeSet mirrored = new UnicodeSet("[\\p{Bidi_Mirrored}]");
|
||||
int count = mirrored.size();
|
||||
int[] chars = new int[count];
|
||||
int[] mirrors = new int[count];
|
||||
int total = 0;
|
||||
|
||||
System.out.println("There are " + count + " mirrored characters.");
|
||||
|
||||
for(int i = 0; i < count; i += 1) {
|
||||
int ch = mirrored.charAt(i);
|
||||
int m = UCharacter.getMirror(ch);
|
||||
|
||||
if (ch != m) {
|
||||
chars[total] = ch & 0xFFFF;
|
||||
mirrors[total++] = m & 0xFFFF;
|
||||
}
|
||||
}
|
||||
|
||||
System.out.println("There are " + total + " characters with a different mirror.\n");
|
||||
|
||||
openFile(filename);
|
||||
writeHeader(null, includeFiles);
|
||||
|
||||
|
||||
dump("mirroredChars", chars, total, 8);
|
||||
|
||||
System.out.println();
|
||||
|
||||
dump("srahCderorrim", mirrors, total, 8);
|
||||
|
||||
output.println("const le_int32 DefaultCharMapper::mirroredCharsCount = " + total + ";\n");
|
||||
|
||||
writeTrailer();
|
||||
closeFile();
|
||||
}
|
||||
|
||||
private static String includeFiles[] = {"LETypes.h", "DefaultCharMapper.h"};
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
BuildMirroringTables bmt = new BuildMirroringTables();
|
||||
|
||||
bmt.writeMirroredDataFile("MirroredCharData.cpp");
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user