Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/make/src/classes/build/tools/generatecharacter/CharacterName.java
32287 views
package build.tools.generatecharacter;12import java.io.*;3import java.nio.*;4import java.util.*;5import java.util.zip.*;67public class CharacterName {89public static void main(String[] args) {10FileReader reader = null;11try {12if (args.length != 2) {13System.err.println("Usage: java CharacterName UnicodeData.txt uniName.dat");14System.exit(1);15}1617reader = new FileReader(args[0]);18BufferedReader bfr = new BufferedReader(reader);19String line = null;2021StringBuilder namePool = new StringBuilder();22byte[] cpPoolBytes = new byte[0x100000];23ByteBuffer cpBB = ByteBuffer.wrap(cpPoolBytes);24int lastCp = 0;25int cpNum = 0;2627while ((line = bfr.readLine()) != null) {28if (line.startsWith("#"))29continue;30UnicodeSpec spec = UnicodeSpec.parse(line);31if (spec != null) {32int cp = spec.getCodePoint();33String name = spec.getName();34cpNum++;35if (name.equals("<control>") && spec.getOldName() != null) {36if (spec.getOldName().length() != 0)37name = spec.getOldName();38else39continue;40} else if (name.startsWith("<")) {41/*423400 <CJK Ideograph Extension A, First>434db5 <CJK Ideograph Extension A, Last>444e00 <CJK Ideograph, First>459fc3 <CJK Ideograph, Last>46ac00 <Hangul Syllable, First>47d7a3 <Hangul Syllable, Last>48d800 <Non Private Use High Surrogate, First>49db7f <Non Private Use High Surrogate, Last>50db80 <Private Use High Surrogate, First>51dbff <Private Use High Surrogate, Last>52dc00 <Low Surrogate, First>53dfff <Low Surrogate, Last>54e000 <Private Use, First>55f8ff <Private Use, Last>5620000 <CJK Ideograph Extension B, First>572a6d6 <CJK Ideograph Extension B, Last>58f0000 <Plane 15 Private Use, First>59ffffd <Plane 15 Private Use, Last>60*/61continue;62}6364if (cp == lastCp + 1) {65cpBB.put((byte)name.length());66} else {67cpBB.put((byte)0); // segment start flag68cpBB.putInt((name.length() << 24) | (cp & 0xffffff));69}70namePool.append(name);71lastCp = cp;72}73}7475byte[] namePoolBytes = namePool.toString().getBytes("ASCII");76int cpLen = cpBB.position();77int total = cpLen + namePoolBytes.length;7879DataOutputStream dos = new DataOutputStream(80new DeflaterOutputStream(81new FileOutputStream(args[1])));82dos.writeInt(total); // total83dos.writeInt(cpLen); // nameOff84dos.write(cpPoolBytes, 0, cpLen);85dos.write(namePoolBytes);86dos.close();8788} catch (Throwable e) {89System.out.println("Unexpected exception:");90e.printStackTrace();91} finally {92if (reader != null) {93try {94reader.close();95} catch (Throwable ee) { ee.printStackTrace(); }96}97}98}99}100101102