You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
225 lines
6.1 KiB
225 lines
6.1 KiB
#!/usr/bin/perl
|
|
|
|
####################################################################################
|
|
# txt2ldml.pl:
|
|
# This tool invokes genldml and genrb to produce res files from xml files
|
|
# Author: Ram Viswanadha
|
|
#
|
|
####################################################################################
|
|
use File::Find;
|
|
use File::Basename;
|
|
use IO::File;
|
|
use Cwd;
|
|
use File::Copy;
|
|
use Getopt::Long;
|
|
use File::Path;
|
|
use File::Copy;
|
|
|
|
GetOptions(
|
|
"--lib=s" => \$envVar,
|
|
"--sourcedir=s" => \$sourceDir,
|
|
"--destdir=s" => \$destDir,
|
|
"--icuroot=s" => \$icuRoot,
|
|
"--genldml=s" => \$genldml,
|
|
"--genrb=s" => \$genrb,
|
|
"--ldml-only=s" => \$ldmlOnly,
|
|
"--ignore-collation" => \$ignoreCollation,
|
|
"--base=s" => \$baseFile,
|
|
"--ignore-specials" => \$ignoreSpecials,
|
|
"--ignore-layout" => \$ignoreLayout,
|
|
"--draft" => \$draft,
|
|
"--only-specials" => \$onlySpecials,
|
|
);
|
|
|
|
|
|
usage() unless defined $sourceDir;
|
|
usage() unless defined $destDir;
|
|
usage() unless defined $icuRoot;
|
|
usage() unless defined $genldml;
|
|
|
|
getPathToGenrb() unless defined $genrb;
|
|
|
|
# create a temp directory and copy all the txt files there
|
|
my $tempDir = $destDir."/temp";
|
|
mkpath($tempDir);
|
|
my $prefix;
|
|
my $tempPackage="LDMLTestPackage";
|
|
# set up environment
|
|
if($$^O =~ /win/){
|
|
$prefix ="";
|
|
cmd("set PATH=%PATH%;$icuRoot/bin;");
|
|
}else{
|
|
$prefix ="$ldVar=$ICU_ROOT/source/common:$ICU_ROOT/source/i18n:$ICU_ROOT/source/tools/toolutil:$ICU_ROOT/source/data/out:$ICU_ROOT/source/data: "
|
|
}
|
|
|
|
# create list of xml files
|
|
my @list;
|
|
if (@ARGV) {
|
|
@list = @ARGV;
|
|
foreach (@list) { $_ .= ".txt" unless (/\.txt$/i); }
|
|
} else {
|
|
opendir(DIR,$sourceDir);
|
|
@list = grep{/\.txt$/} readdir(DIR);
|
|
closedir(DIR);
|
|
}
|
|
|
|
# creating res files and LDML files
|
|
# cannot be combined in one step
|
|
# since there may be dependencies while building
|
|
# the res files which may not be resolved until
|
|
# all files are built
|
|
|
|
# Step 1: create *.res files
|
|
foreach $item (@list){
|
|
next if($item eq "." || $item eq "..");
|
|
resify($item) unless defined $ldmlOnly;
|
|
}
|
|
|
|
# Step 2: create *.xml files
|
|
foreach $item (@list){
|
|
next if($item eq "." || $item eq ".." );
|
|
$txt = $item;;
|
|
$txt =~ s/\.txt$//i;
|
|
ldmlify($txt);
|
|
}
|
|
|
|
# run the xmlify converter
|
|
sub ldmlify{
|
|
my $infile = shift;
|
|
my $genldmlExec = $genldml."/genldml";
|
|
my $ic ="";
|
|
my $is ="";
|
|
my $il ="";
|
|
my $base = "";
|
|
my $baseTyp = "";
|
|
my $id = "";
|
|
my $os = "";
|
|
if (defined $ignoreCollation){
|
|
$ic = "--ignore-collation";
|
|
}
|
|
if (defined $ignoreSpecials){
|
|
$is = "--ignore-specials";
|
|
}
|
|
if(defined $ignoreLayout){
|
|
$il = "--ignore-layout";
|
|
}
|
|
if(defined $draft){
|
|
$id = "--draft";
|
|
}
|
|
if(defined $onlySpecials){
|
|
$os = "--only-specials";
|
|
}
|
|
if(defined $baseFile){
|
|
$baseLoc = getBaseLocale($baseFile, $infile);
|
|
$base = "--base $baseLoc";
|
|
|
|
# Commented out because currently we don't need to
|
|
# pass in the type argument to genldml
|
|
# can be uncommented if needed
|
|
#$baseLoc = getBaseType ($baseFile, $infile);
|
|
#if(baseLoc ne ""){
|
|
# $baseTyp ="--base-type $baseLoc";
|
|
#}
|
|
|
|
}
|
|
|
|
cmd("$prefix $genldmlExec --sourcedir $tempDir --destdir $destDir --package $tempPackage $base $baseTyp $ic $il $is $id $os $infile");
|
|
}
|
|
|
|
sub getBaseLocale(){
|
|
my $basefile = shift;
|
|
my $locale = shift;
|
|
$baseFH = IO::File->new($basefile,"r")
|
|
or die "could not open the file $basefile for reading: $! \n";
|
|
while(defined ( $line = <$baseFH>)){
|
|
if( $line =~ /^\<$locale\>/){
|
|
($loc,$bse) = split (/\>/, $line);
|
|
$bse =~ s/^\s+\<//;
|
|
return $bse;
|
|
}
|
|
}
|
|
}
|
|
|
|
#------------------------
|
|
# This method is commented out for now
|
|
# can be uncommented if we need to pass baseType argument to
|
|
# genldml. Currently we don't need this feature
|
|
# P.S: Not tested.
|
|
#--------------------------
|
|
#sub getBaseType(){
|
|
# my $basefile = shift;
|
|
# my $locale = shift;
|
|
# $baseFH = IO::File->new($basefile,"r")
|
|
# or die "could not open the file $basefile for reading: $! \n";
|
|
# while(defined ( $line = <$baseFH>)){
|
|
# if( $line =~ /\<$locale\>/){
|
|
# ($loc,$bse) = split (/\>/, $line);
|
|
# $bse =~ s/^\s+\<//;
|
|
# return $bse;
|
|
# }
|
|
# }
|
|
#}
|
|
|
|
# run genrb
|
|
sub resify{
|
|
my $infile = shift;
|
|
my $genrbExec = $genrb."/genrb";
|
|
|
|
cmd("$prefix $genrbExec --sourcedir $sourceDir --package-name $tempPackage --destdir $tempDir --encoding UTF8 $infile");
|
|
}
|
|
|
|
#
|
|
sub getPathToGenrb{
|
|
$genrb = $icuRoot."/bin";
|
|
}
|
|
|
|
#-----------------------------------------------------------------------
|
|
# Execute a command
|
|
# Param: Command
|
|
# Param: Display line, or '' to display command
|
|
sub cmd {
|
|
my $cmd = shift;
|
|
my $prompt = shift;
|
|
$prompt = "Command: $cmd.." unless ($prompt);
|
|
print $prompt."\n";
|
|
system($cmd);
|
|
my $exit_value = $? >> 8;
|
|
#my $signal_num = $? & 127;
|
|
#my $dumped_core = $? & 128;
|
|
if ($exit_value == 0) {
|
|
print "ok\n";
|
|
} else {
|
|
++$errCount;
|
|
print "ERROR ($exit_value)\n";
|
|
exit(1);
|
|
}
|
|
}
|
|
|
|
#-----------------------------------------------------------------------
|
|
sub usage {
|
|
print << "END";
|
|
Usage:
|
|
txt2ldml.pl
|
|
Options:
|
|
--lib=<environment variable for lib path>
|
|
--sourcedir=<directory>
|
|
--destdir=<directory>
|
|
--icuroot=<path to ICU's root directory>
|
|
--genldml=<path to genldml executatble>
|
|
--genrb=<path to genrb executatble>
|
|
--ignore-collation
|
|
--base=<the text file that contains the base to locale mapping including the path>
|
|
--ignore-layout
|
|
--ignore-specials
|
|
--only-specials
|
|
--draft
|
|
|
|
txt2ldml creates *.xml file from *.txt files by invoking the respective tools
|
|
Optionally, one or more locales may be specified on the command line.
|
|
If this is done, only those locales will be processed. If no locales
|
|
are listed, all locales are processed.
|
|
|
|
END
|
|
exit(0);
|
|
}
|