01: /*
02: *******************************************************************************
03: * Copyright (C) 1996-2005, International Business Machines Corporation and *
04: * others. All Rights Reserved. *
05: *******************************************************************************
06: *
07: */
08:
09: package com.ibm.icu.dev.tool.layout;
10:
11: import com.ibm.icu.impl.Utility;
12: import com.ibm.icu.lang.UCharacter;
13: import com.ibm.icu.text.UnicodeSet;
14:
15: /**
16: * @author emader
17: *
18: * TODO To change the template for this generated type comment go to
19: * Window - Preferences - Java - Code Style - Code Templates
20: */
21: public class BuildMirroringTables extends ModuleWriter {
22: public BuildMirroringTables() {
23: super ();
24: }
25:
26: public void dump(String name, int[] array, int length,
27: int valuesPerLine) {
28: StringBuffer line = new StringBuffer(" ");
29:
30: output.println("const LEUnicode32 DefaultCharMapper::" + name
31: + "[] = {");
32:
33: for (int i = 0; i < length; i += 1) {
34:
35: if (i > 0 && i % valuesPerLine == 0) {
36: output.println(line.toString());
37: line.setLength(4);
38: }
39:
40: line.append("0x" + Utility.hex(array[i], 4));
41: line.append(", ");
42: }
43:
44: line.setLength(line.length() - 2);
45:
46: output.println(line.toString());
47: output.println("};\n");
48: }
49:
50: public void writeMirroredDataFile(String filename) {
51: UnicodeSet mirrored = new UnicodeSet("[\\p{Bidi_Mirrored}]");
52: int count = mirrored.size();
53: int[] chars = new int[count];
54: int[] mirrors = new int[count];
55: int total = 0;
56:
57: System.out.println("There are " + count
58: + " mirrored characters.");
59:
60: for (int i = 0; i < count; i += 1) {
61: int ch = mirrored.charAt(i);
62: int m = UCharacter.getMirror(ch);
63:
64: if (ch != m) {
65: chars[total] = ch & 0xFFFF;
66: mirrors[total++] = m & 0xFFFF;
67: }
68: }
69:
70: System.out.println("There are " + total
71: + " characters with a different mirror.\n");
72:
73: openFile(filename);
74: writeHeader(null, includeFiles);
75:
76: dump("mirroredChars", chars, total, 8);
77:
78: System.out.println();
79:
80: dump("srahCderorrim", mirrors, total, 8);
81:
82: output
83: .println("const le_int32 DefaultCharMapper::mirroredCharsCount = "
84: + total + ";\n");
85:
86: writeTrailer();
87: closeFile();
88: }
89:
90: private static String includeFiles[] = { "LETypes.h",
91: "DefaultCharMapper.h" };
92:
93: public static void main(String[] args) {
94: BuildMirroringTables bmt = new BuildMirroringTables();
95:
96: bmt.writeMirroredDataFile("MirroredCharData.cpp");
97: }
98: }
|