/*
* Copyright (C) 2009.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 3 or
* version 2 as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*/
package uk.me.parabola.util;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;
import uk.me.parabola.imgfmt.Utils;
import com.ibm.icu.text.Transliterator;
/**
* Call this with a unicode row number and it will produce an empty table
* that can be modified.
*
* @author Steve Ratcliffe
*/
public class TableIcuCreator {
private static Transliterator trans;
public static void main(String[] args) {
int count = 0;
Enumeration<String> targets = Transliterator.getAvailableIDs();
while (targets.hasMoreElements()) {
String s = targets.nextElement();
System.out.println(s);
count++;
}
System.out.println("number " + count);
//System.exit(0);
//trans = Transliterator.getInstance("Any-en_US; nfd; [\u0301\u0302\u0304\u0306\u0307\u0308\u030c\u0328] remove; nfc"); // [:nonspacing mark:] remove; nfc");
trans = Transliterator.getInstance("Any-Latin"); // [:nonspacing mark:] remove; nfc");
for (int row = 0; row < 256; row++) {
String name = String.format("row%02x.trans", row);
PrintWriter out = null;
try {
out = new PrintWriter(new FileWriter(name));
printRow(out, row);
} catch (IOException e) {
System.out.println("Could not open " + name + " for write");
} catch (UselessException e) {
//System.out.println("Deleting " + name);
File f = new File(name);
f.delete();
} finally {
Utils.closeFile(out);
}
}
}
private static void printRow(PrintWriter out, int row) throws UselessException {
out.println("#");
out.println("# This is a table for transliterating characters.");
out.println("# It was created using icu4j");
out.println("#");
out.println("# All resulting strings that contained characters outside the");
out.println("# range of iso 8859-1 are commented out");
out.println("#");
out.println();
int count = 0;
for (int i = 0; i < 256; i++) {
char c = (char) ((row << 8) + i);
String single = "" + c;
String result = trans.transliterate(single);
if (result.length() == 1 && result.charAt(0) == c)
result = "?";
else
count++;
boolean inRange = true;
for (char rc : result.toCharArray()) {
if (rc > 0xff) {
//System.out.printf("out of range result %c for row %d\n", rc, row);
inRange = false;
break;
}
}
if (!inRange) {
count--;
out.print("#");
}
out.format("U+%02x%02x %-12.12s # Character %s", row, i, result, single);
out.println();
}
if (count == 0)
throw new UselessException("count of 0");
}
private static class UselessException extends Exception {
private UselessException(String msg) {
super(msg);
}
}
}