1
package com.thaiopensource.datatype.xsd.regex.java.gen;
4
import java.io.OutputStream;
5
import java.io.FileOutputStream;
7
import java.io.BufferedWriter;
8
import java.io.OutputStreamWriter;
9
import java.io.BufferedReader;
10
import java.io.FileInputStream;
11
import java.io.InputStreamReader;
12
import java.io.IOException;
13
import java.util.HashMap;
15
import java.util.List;
16
import java.util.Vector;
17
import java.util.Iterator;
20
public class CategoriesGen {
21
static public void main(String[] args) throws IOException {
22
if (args.length != 3) {
23
System.err.println("usage: " + CategoriesGen.class.getName() + " className srcDir UnicodeData.txt");
26
BufferedReader r = new BufferedReader(new InputStreamReader(new FileInputStream(args[2])));
27
CategoriesGen g = new CategoriesGen();
29
String className = args[0];
30
String srcDir = args[1];
31
int lastDot = className.lastIndexOf('.');
36
pkg = className.substring(0, lastDot);
37
className = className.substring(lastDot + 1);
38
srcDir = srcDir + File.separator + pkg.replace('.', File.separatorChar);
40
String srcFile = srcDir + File.separator + className + ".java";
41
OutputStream stm = new FileOutputStream(srcFile);
42
Writer w = new BufferedWriter(new OutputStreamWriter(stm));
43
String lineSep = System.getProperty("line.separator");
44
w.write("// This file was automatically generated by ");
45
w.write(CategoriesGen.class.getName());
48
w.write("package " + pkg + ";" + lineSep + lineSep);
49
w.write("class " + className + " {" + lineSep);
51
w.write("}" + lineSep);
55
void load(BufferedReader r) throws IOException {
56
String lastCategory = null;
60
String line = r.readLine();
63
int semi = line.indexOf(';');
64
if (semi != 5 && semi != 6)
66
int code = Integer.parseInt(line.substring(0, semi), 16);
67
int semi2 = line.indexOf(';', semi + 1);
68
String name = line.substring(semi, semi2);
69
String category = line.substring(semi2 + 1, semi2 + 3);
70
if (!category.equals(lastCategory) ||
71
!(lastCode + 1 == code || name.endsWith(", Last>"))) {
72
if (lastCategory != null)
73
add(firstCode, lastCode, lastCategory);
74
lastCategory = category;
79
if (lastCategory != null)
80
add(firstCode, lastCode, lastCategory);
83
private final Map map = new HashMap();
86
private final int lower;
87
private final int upper;
89
public Range(int lower, int upper) {
95
void add(int firstCode, int lastCode, String category) {
96
List list = (List)map.get(category);
99
map.put(category, list);
101
list.add(new Range(firstCode, lastCode));
104
static private final String INDENT = " ";
106
void save(Writer w, String lineSep) throws IOException {
107
Set set = map.entrySet();
110
w.write("static final String CATEGORY_NAMES = \"");
111
for (Iterator iter = set.iterator(); iter.hasNext();) {
112
Map.Entry entry = (Map.Entry)iter.next();
113
w.write((String)entry.getKey());
119
w.write("static final int[][] CATEGORY_RANGES = {");
122
for (Iterator iter = set.iterator(); iter.hasNext();) {
123
Map.Entry entry = (Map.Entry)iter.next();
132
w.write((String)entry.getKey());
134
List list = (List)entry.getValue();
135
for (int i = 0, len = list.size(); i < len; i++) {
136
Range r = (Range)list.get(i);
141
w.write(Integer.toHexString(r.lower));
144
w.write(Integer.toHexString(r.upper));