jdk/make/src/classes/build/tools/generatebreakiteratordata/GenerateBreakIteratorData.java
author |
alanb |
|
Thu, 17 Mar 2016 19:04:16 +0000 |
changeset 36511 |
9d0388c6b336 |
parent 36014 |
3d50784f2dc2
|
permissions |
-rw-r--r-- |
8142968: Module System implementation
Summary: Initial integration of JEP 200, JEP 260, JEP 261, and JEP 282
Reviewed-by: alanb, mchung, naoto, rriggs, psandoz, plevart, mullan, ascarpino, vinnie, prr, sherman, dfuchs, mhaupt
Contributed-by: alan.bateman@oracle.com, alex.buckley@oracle.com, jonathan.gibbons@oracle.com, karen.kinnear@oracle.com, mandy.chung@oracle.com, mark.reinhold@oracle.com, chris.hegarty@oracle.com, alexandr.scherbatiy@oracle.com, amy.lu@oracle.com, calvin.cheung@oracle.com, daniel.fuchs@oracle.com, erik.joelsson@oracle.com, harold.seigel@oracle.com, jaroslav.bachorik@oracle.com, jean-francois.denise@oracle.com, jan.lahoda@oracle.com, james.laskey@oracle.com, lois.foltan@oracle.com, miroslav.kos@oracle.com, huaming.li@oracle.com, sean.mullan@oracle.com, naoto.sato@oracle.com, masayoshi.okutsu@oracle.com, peter.levart@gmail.com, philip.race@oracle.com, claes.redestad@oracle.com, sergey.bylokhov@oracle.com, alexandre.iline@oracle.com, volker.simonis@gmail.com, staffan.larsen@oracle.com, stuart.marks@oracle.com, semyon.sadetsky@oracle.com, serguei.spitsyn@oracle.com, sundararajan.athijegannathan@oracle.com, valerie.peng@oracle.com, vincent.x.ryan@oracle.com, weijun.wang@oracle.com, yuri.nesterenko@oracle.com, yekaterina.kantserova@oracle.com, alexander.kulyakhtin@oracle.com, felix.yang@oracle.com, andrei.eremeev@oracle.com, frank.yuan@oracle.com, sergei.pikalev@oracle.com, sibabrata.sahoo@oracle.com, tiantian.du@oracle.com, sha.jiang@oracle.com
/*
* Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code 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
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package build.tools.generatebreakiteratordata;
import java.util.Enumeration;
import java.util.ListResourceBundle;
import java.util.Locale;
import java.util.ResourceBundle;
/**
* Generates datafile for BreakIterator.
*/
public class GenerateBreakIteratorData {
/**
* Directory where generated data files are put in.
*/
private static String outputDir = "" ;
/**
* Unicode data file
*/
private static String unicodeData = "UnicodeData.txt";
/**
* Locale data
*/
private static String language = "";
private static String country = "";
private static String valiant = "";
private static String localeName = ""; /* _language_country_valiant */
public static void main(String[] args) {
/* Parse command-line options */
processArgs(args);
/* Make categoryMap from Unicode data */
CharacterCategory.makeCategoryMap(unicodeData);
/* Generate files */
try {
generateFiles();
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
}
private static String localizedBundleName(String pkg, String clazz) {
if (language.length() > 0) {
return pkg + ".ext." + clazz + '_' + language;
} else {
return pkg + '.' + clazz;
}
}
/**
* Generate data files whose names are included in
* sun.text.resources.BreakIteratorInfo+<localeName>
*/
private static void generateFiles() throws Exception {
String[] classNames;
ResourceBundle rules, info;
info = (ResourceBundle) Class.forName(
localizedBundleName("sun.text.resources", "BreakIteratorInfo")).newInstance();
classNames = info.getStringArray("BreakIteratorClasses");
rules = (ResourceBundle) Class.forName(
localizedBundleName("sun.text.resources", "BreakIteratorRules")).newInstance();
if (info.containsKey("CharacterData")) {
generateDataFile(info.getString("CharacterData"),
rules.getString("CharacterBreakRules"),
classNames[0]);
}
if (info.containsKey("WordData")) {
generateDataFile(info.getString("WordData"),
rules.getString("WordBreakRules"),
classNames[1]);
}
if (info.containsKey("LineData")) {
generateDataFile(info.getString("LineData"),
rules.getString("LineBreakRules"),
classNames[2]);
}
if (info.containsKey("SentenceData")) {
generateDataFile(info.getString("SentenceData"),
rules.getString("SentenceBreakRules"),
classNames[3]);
}
}
/**
* Generate a data file for break-iterator
*/
private static void generateDataFile(String datafile, String rule, String builder) {
RuleBasedBreakIteratorBuilder bld;
if (builder.equals("RuleBasedBreakIterator")) {
bld = new RuleBasedBreakIteratorBuilder(rule);
} else if (builder.equals("DictionaryBasedBreakIterator")) {
bld = new DictionaryBasedBreakIteratorBuilder(rule);
} else {
throw new IllegalArgumentException("Invalid break iterator class \"" + builder + "\"");
}
bld.makeFile(datafile);
}
/**
* Parses the specified arguments and sets up the variables.
*/
private static void processArgs(String[] args) {
for (int i = 0; i < args.length; i++) {
String arg = args[i];
if (arg.equals("-o")) {
outputDir = args[++i];
} else if (arg.equals("-spec")) {
unicodeData = args[++i];
} else if (arg.equals("-language")) {
language = args[++i];
} else if (arg.equals("-country")) {
country = args[++i];
} else if (arg.equals("-valiant")) {
valiant = args[++i];
} else {
usage();
}
}
// Set locale name
localeName = getLocaleName();
}
/**
* Make locale name ("_language_country_valiant")
*/
private static String getLocaleName() {
if (language.equals("")) {
if (!country.equals("") || !valiant.equals("")) {
language = "en";
} else {
return "";
}
}
StringBuffer sb = new StringBuffer();
sb.append('_');
sb.append(language);
if (!country.equals("") || !valiant.equals("")) {
sb.append('_');
sb.append(country);
if (!valiant.equals("")) {
sb.append('_');
sb.append(valiant);
}
}
return sb.toString();
}
/**
* Usage: Displayed when an invalid command-line option is specified.
*/
private static void usage() {
System.err.println("Usage: GenerateBreakIteratorData [options]\n" +
" -o outputDir output directory name\n" +
" -spec specname unicode text filename\n" +
" and locale data:\n" +
" -lang language target language name\n" +
" -country country target country name\n" +
" -valiant valiant target valiant name\n"
);
}
/**
* Return the path of output directory
*/
static String getOutputDirectory() {
return outputDir;
}
}