| /* |
| ******************************************************************************* |
| * 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"); |
| } |
| } |