summaryrefslogtreecommitdiff
path: root/transex3
diff options
context:
space:
mode:
Diffstat (limited to 'transex3')
-rw-r--r--transex3/inc/export.hxx12
-rw-r--r--transex3/inc/gsicheck.hxx (renamed from transex3/source/gsicheck.hxx)0
-rw-r--r--transex3/inc/inireader.hxx52
-rw-r--r--transex3/inc/treeconfig.hxx28
-rw-r--r--transex3/prj/d.lst2
-rw-r--r--transex3/scripts/fast_merge.pl2
-rwxr-xr-xtransex3/scripts/localize_old.pl1130
-rw-r--r--transex3/source/cfgmerge.cxx4
-rw-r--r--transex3/source/export2.cxx13
-rw-r--r--transex3/source/hw2fw.cxx202
-rw-r--r--transex3/source/inireader.cxx132
-rw-r--r--transex3/source/localize.cxx183
-rw-r--r--transex3/source/makefile.mk30
-rw-r--r--transex3/source/treeconfig.cxx128
-rw-r--r--transex3/source/txtconv.cxx168
-rw-r--r--transex3/source/xrmmerge.cxx4
16 files changed, 1572 insertions, 518 deletions
diff --git a/transex3/inc/export.hxx b/transex3/inc/export.hxx
index 3d7eee8e1eaf..ec5195034e91 100644
--- a/transex3/inc/export.hxx
+++ b/transex3/inc/export.hxx
@@ -51,6 +51,12 @@
#include <set> /* std::set*/
#include <vector> /* std::vector*/
#include <queue>
+#include <string>
+
+#include <unistd.h>
+#ifdef WNT
+#include <direct.h>
+#endif
#define NO_TRANSLATE_ISO "x-no-translate"
@@ -326,7 +332,6 @@ public:
static bool skipProject( ByteString sPrj ) ;
- static ByteString sIsoCode99;
static void InitLanguages( bool bMergeMode = false );
static void InitForcedLanguages( bool bMergeMode = false );
static std::vector<ByteString> GetLanguages();
@@ -349,12 +354,12 @@ public:
static bool isSourceLanguage( const ByteString &sLanguage );
static bool isAllowed( const ByteString &sLanguage );
- //static bool isMergingGermanAllowed( const ByteString& rPrj );
static bool LanguageAllowed( const ByteString &nLanguage );
static void Languages( std::vector<ByteString>::const_iterator& begin , std::vector<ByteString>::const_iterator& end );
static void getRandomName( const ByteString& sPrefix , ByteString& sRandStr , const ByteString& sPostfix );
static void getRandomName( ByteString& sRandStr );
+ static void getCurrentDir( std::string& dir );
static void replaceEncoding( ByteString& rString );
@@ -517,8 +522,6 @@ private:
public:
MergeDataFile( const ByteString &rFileName, const ByteString& rFile , BOOL bErrLog, CharSet aCharSet, bool bCaseSensitive = false );
-// MergeDataFile( const ByteString &rFileName, const ByteString& rFile , BOOL bErrLog, CharSet aCharSet
-// );
~MergeDataFile();
@@ -538,7 +541,6 @@ public:
static ByteString CreateKey( const ByteString& rTYP , const ByteString& rGID , const ByteString& rLID , const ByteString& rFilename , bool bCaseSensitive = false );
ByteString Dump();
-// void WriteErrorLog( const ByteString &rFileName );
void WriteError( const ByteString &rLine );
};
diff --git a/transex3/source/gsicheck.hxx b/transex3/inc/gsicheck.hxx
index 13debcfc7106..13debcfc7106 100644
--- a/transex3/source/gsicheck.hxx
+++ b/transex3/inc/gsicheck.hxx
diff --git a/transex3/inc/inireader.hxx b/transex3/inc/inireader.hxx
new file mode 100644
index 000000000000..0861290adf9f
--- /dev/null
+++ b/transex3/inc/inireader.hxx
@@ -0,0 +1,52 @@
+#include <string>
+#include <hash_map>
+#include <unicode/regex.h>
+
+using namespace std;
+
+namespace transex3
+{
+
+struct eqstr
+{
+ bool operator()( const string s1 , const string s2) const
+ {
+ return s1.compare( s2 ) == 0;
+ }
+};
+
+typedef std::hash_map< string , string > stringmap;
+typedef std::hash_map< string, stringmap* > INImap;
+
+class INIreader
+{
+ private:
+ UErrorCode section_status;
+ UErrorCode parameter_status;
+ RegexMatcher* section_match;
+ RegexMatcher* parameter_match;
+
+ public:
+ INIreader(): section_status ( U_ZERO_ERROR ) ,
+ parameter_status ( U_ZERO_ERROR )
+ {
+ section_match = new RegexMatcher ( "^\\s*\\[([a-zA-Z0-9]*)\\].*" , 0 , section_status );
+ parameter_match = new RegexMatcher ( "^\\s*([a-zA-Z0-9]*)\\s*=\\s*([a-zA-Z0-9 ]*).*" , 0 , parameter_status ) ;
+ }
+ ~INIreader()
+ {
+ delete section_match;
+ delete parameter_match;
+ }
+ // open "filename", fill hash_map with sections / paramaters
+ bool read( INImap& myMap , string& filename );
+
+ private:
+ bool is_section( string& line , string& section_str );
+ bool is_parameter( string& line , string& parameter_key , string& parameter_value );
+ inline void check_status( UErrorCode status );
+ inline void toStlString ( const UnicodeString& str, string& stl_str );
+ inline void trim( string& str );
+};
+
+}
diff --git a/transex3/inc/treeconfig.hxx b/transex3/inc/treeconfig.hxx
new file mode 100644
index 000000000000..96d693b0d376
--- /dev/null
+++ b/transex3/inc/treeconfig.hxx
@@ -0,0 +1,28 @@
+#include <vector>
+#include <string>
+
+#include "inireader.hxx"
+
+namespace transex3{
+
+class Treeconfig
+{
+
+ private:
+ INIreader inireader;
+ INImap map;
+ bool has_config_file;
+ void getCurrentDir( string& dir );
+ bool isConfigFilePresent();
+
+ public:
+
+ Treeconfig() : has_config_file( false ) { parseConfig(); }
+ // read the config file, returns true in case a config file had been found
+ bool parseConfig();
+ // returns a string vector containing all active repositories, returns true in case we are deep inside
+ // of a source tree. This could affect the behavour of the tool
+ bool getActiveRepositories( vector<string>& active_repos);
+};
+
+}
diff --git a/transex3/prj/d.lst b/transex3/prj/d.lst
index 39bafa4694c6..a469837275ed 100644
--- a/transex3/prj/d.lst
+++ b/transex3/prj/d.lst
@@ -41,8 +41,10 @@ mkdir: %_DEST%\bin%_EXT%\help\com\sun\star\help
..\%__SRC%\class\receditor\receditor.jar %_DEST%\bin%_EXT%\receditor.jar
..\scripts\localize.pl %_DEST%\bin%_EXT%\localize.pl
+..\scripts\localize_old.pl %_DEST%\bin%_EXT%\localize_old.pl
..\scripts\localize %_DEST%\bin%_EXT%\localize
..\scripts\fast_merge.pl %_DEST%\bin%_EXT%\fast_merge.pl
+..\scripts\keyidGen.pl %_DEST%\bin%_EXT%\keyidGen.pl
..\inc\export.hxx %_DEST%\inc%_EXT%\transex3\export.hxx
..\inc\transex3\directory.hxx %_DEST%\inc%_EXT%\transex3\directory.hxx
diff --git a/transex3/scripts/fast_merge.pl b/transex3/scripts/fast_merge.pl
index 266c1c0801e8..7321a9a42911 100644
--- a/transex3/scripts/fast_merge.pl
+++ b/transex3/scripts/fast_merge.pl
@@ -179,7 +179,7 @@ sub getNextSdfObj
}
else
{
- $line =~ /^(([^\t]*)\t([^\t]*).*)/o ;
+ $line =~ /^(([^\t]*)\t([^\t]*)[^\t]*\t[^\t]*\t[^\t]*\t[^\t]*\t[^\t]*\t[^\t]*\t[^\t]*\t[^\t]*\t[^\t]*\t[^\t]*\t[^\t]*\t[^\t]*\t[^\t]*\t*)/o ;
if( defined $1 && defined $2 && defined $3 )
{
$obj->line ( $1 );
diff --git a/transex3/scripts/localize_old.pl b/transex3/scripts/localize_old.pl
new file mode 100755
index 000000000000..151399d22002
--- /dev/null
+++ b/transex3/scripts/localize_old.pl
@@ -0,0 +1,1130 @@
+:
+eval 'exec perl -wS $0 ${1+"$@"}'
+ if 0;
+
+
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2008 by Sun Microsystems, Inc.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# $RCSfile: localize.pl,v $
+#
+# $Revision: 1.18 $
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+use strict;
+use Getopt::Long;
+use IO::Handle;
+use File::Find;
+use File::Temp;
+use File::Copy;
+use File::Glob qw(:glob csh_glob);
+use Cwd;
+
+# ver 1.1
+#
+#### module lookup
+#use lib ("$ENV{SOLARENV}/bin/modules", "$ENV{COMMON_ENV_TOOLS}/modules");
+
+#### module lookup
+# OOo conform
+my @lib_dirs;
+BEGIN {
+ if ( !defined($ENV{SOLARENV}) ) {
+ die "No environment found (environment variable SOLARENV is undefined)";
+ }
+ push(@lib_dirs, "$ENV{SOLARENV}/bin/modules");
+ push(@lib_dirs, "$ENV{COMMON_ENV_TOOLS}/modules") if defined($ENV{COMMON_ENV_TOOLS});
+}
+use lib (@lib_dirs);
+
+#### globals ####
+my $sdffile = '';
+my $no_sort = '';
+my $outputfile = '';
+my $mode = '';
+my $bVerbose="0";
+my $srcpath = '';
+my $WIN;
+my $languages;
+#my %sl_modules; # Contains all modules where en-US and de is source language
+my $use_default_date = '0';
+
+ # ( leftpart ) ( rightpart )
+ # prj file dummy type gid lid helpid pform width lang text helptext qhelptext title timestamp
+my $sdf_regex = "((([^\t]*)\t([^\t]*)\t([^\t]*)\t([^\t]*)\t([^\t]*)\t([^\t]*)\t([^\t]*)\t([^\t]*)\t([^\t]*))\t([^\t]*)\t(([^\t]*)\t([^\t]*)\t([^\t]*)\t([^\t]*)\t)([^\t]*))";
+my $file_types = "(src|hrc|xcs|xcu|lng|ulf|xrm|xhp|xcd|xgf|xxl|xrb)";
+# Always use this date to prevent cvs conflicts
+my $default_date = "2002-02-02 02:02:02";
+
+#### main ####
+parse_options();
+
+if ( defined $ENV{USE_SHELL} && $ENV{USE_SHELL} eq '4nt' ) {
+ $WIN = 'TRUE';
+}
+ else {
+ $WIN = '';
+}
+
+#%sl_modules = fetch_sourcelanguage_dirlist();
+
+
+if ( $mode eq "merge" ) {
+ merge_gsicheck();
+ splitfile( $sdffile );
+ unlink $sdffile; # remove temp file!
+}
+elsif( $mode eq "extract" ) {
+ collectfiles( $outputfile );
+}
+else {
+ usage();
+}
+
+exit(0);
+
+#########################################################
+sub splitfile{
+
+ my $lastFile = '';
+ my $currentFile = '';
+ my $cur_sdffile = '';
+ my $last_sdffile = '';
+ my $delim;
+ my $badDelim;
+ my $start = 'TRUE';
+ my %index = ();
+ my %block;
+
+ STDOUT->autoflush( 1 );
+
+ #print STDOUT "Open File $sdffile\n";
+ open MYFILE , "< $sdffile"
+ or die "Can't open '$sdffile'\n";
+
+ while( <MYFILE>){
+ if( /$sdf_regex/ ){
+ my $line = defined $_ ? $_ : '';
+ my $prj = defined $3 ? $3 : '';
+ my $file = defined $4 ? $4 : '';
+ my $type = defined $6 ? $6 : '';
+ my $gid = defined $7 ? $7 : '';
+ my $lid = defined $8 ? $8 : '';
+ my $lang = defined $12 ? $12 : '';
+ my $plattform = defined $10 ? $10 : '';
+ my $helpid = defined $9 ? $9 : '';
+
+ next if( $prj eq "binfilter" ); # Don't merge strings into binfilter module
+ chomp( $line );
+ $currentFile = $srcpath . '\\' . $prj . '\\' . $file;
+ if ( $WIN ) { $currentFile =~ s/\//\\/g; }
+ else { $currentFile =~ s/\\/\//g; }
+
+ $cur_sdffile = $currentFile;
+ #if( $cur_sdffile =~ /\.$file_types[\s]*$/ ){
+ if( $WIN ) { $cur_sdffile =~ s/\\[^\\]*\.$file_types[\s]*$/\\localize.sdf/; }
+ else { $cur_sdffile =~ s/\/[^\/]*\.$file_types[\s]*$/\/localize.sdf/; }
+ #}
+
+ # Set default date
+ if( $line =~ /(.*)\t[^\t\$]*$/ ){
+ $line = $1."\t".$default_date;
+ }
+
+ if( $start ){
+ $start='';
+ $lastFile = $currentFile; # ?
+ $last_sdffile = $cur_sdffile;
+ }
+
+ if( $lang eq "en-US" ){}
+ elsif( $cur_sdffile eq $last_sdffile )
+ {
+ $block{ "$prj\t$file\t$type\t$gid\t$lid\t$helpid\t$plattform\t$lang" } = $line ;
+ }
+ else
+ {
+ writesdf( $lastFile , \%block );
+ $lastFile = $currentFile; #?
+ $last_sdffile = $cur_sdffile;
+ %block = ();
+ #if( ! $lang eq "en-US" ) {
+ $block{ "$prj\t$file\t$type\t$gid\t$lid\t$helpid\t$plattform\t$lang" } = $line ;
+ #}
+
+ }
+ } #else { print STDOUT "splitfile REGEX kaputt\n";}
+
+ }
+ writesdf( $lastFile , \%block );
+ %block = ();
+ close( MYFILE );
+
+}
+#########################################################
+
+#sub fetch_sourcelanguage_dirlist
+#{
+#
+# my $working_path = getcwd();
+# my %sl_dirlist;
+#
+# chdir $srcpath;
+# my @all_dirs = csh_glob( "*" );
+#
+# foreach my $file ( @all_dirs )
+# {
+# if( -d $file )
+# {
+# my $module = $file;
+# $file .= "/prj/l10n";
+# $file =~ s/\//\\/ , if( $WIN ) ;
+#
+# if( -f $file ) # Test file <module>/prj/l10n
+# {
+# $sl_dirlist{ $module } = 1;
+# if( $bVerbose eq "1" ) { print STDOUT "$module: de and en-US source language detected\n"; }
+# }
+# }
+# }
+#
+# chdir $working_path;
+#
+# return %sl_dirlist;
+#}
+
+#sub has_two_sourcelanguages
+#{
+# my $module = shift;
+# return defined $sl_modules{ $module } ;
+#}
+sub writesdf{
+
+ my $lastFile = shift;
+ my $blockhash_ref = shift;
+ my $localizeFile = $lastFile;
+ my %index=();
+
+ if( $localizeFile =~ /\.$file_types[\s]*$/ ){
+ if( $WIN ) { $localizeFile =~ s/\\[^\\]*\.$file_types[\s]*$/\\localize.sdf/; }
+ else { $localizeFile =~ s/\/[^\/]*\.$file_types[\s]*$/\/localize.sdf/; }
+ }else {
+ print STDERR "Strange filetype found '$localizeFile'\n";
+ return;
+ }
+ if( open DESTFILE , "< $localizeFile" ){
+
+ #or die "Can't open/create '\$localizeFile'";
+
+ #### Build hash
+ while(<DESTFILE>){
+ if( /$sdf_regex/ ){
+ my $line = defined $_ ? $_ : '';
+ my $prj = defined $3 ? $3 : '';
+ my $file = defined $4 ? $4 : '';
+ my $type = defined $6 ? $6 : '';
+ my $gid = defined $7 ? $7 : '';
+ my $lid = defined $8 ? $8 : '';
+ my $lang = defined $12 ? $12 : '';
+ my $plattform = defined $10 ? $10 : '';
+ my $helpid = defined $9 ? $9 : '';
+
+ chomp( $line );
+ $index{ "$prj\t$file\t$type\t$gid\t$lid\t$helpid\t$plattform\t$lang" } = $line ;
+
+ } #else { print STDOUT "writesdf REGEX kaputt $_\n";}
+
+ }
+ close( DESTFILE );
+ }
+ #### Copy new strings
+ my @mykeys = keys( %{ $blockhash_ref } );
+ my $isDirty = "FALSE";
+ foreach my $key( @mykeys ){
+ if( ! defined $index{ $key } ){
+ # Add new entry
+ $index{ $key } = $blockhash_ref->{ $key} ;
+ $isDirty = "TRUE";
+ }elsif( $index{ $key } ne $blockhash_ref->{ $key } ){
+ # Overwrite old entry
+ $index{ $key } = $blockhash_ref->{ $key };
+ $isDirty = "TRUE";
+ }else {
+ }
+ }
+
+ #### Write file
+
+ if( !$bVerbose ){ print STDOUT "."; }
+ if( $isDirty eq "TRUE" ){
+ if( $bVerbose ){ print STDOUT "$localizeFile\n"; }
+ if( open DESTFILE , "+> $localizeFile" ){
+ print DESTFILE get_license_header();
+ @mykeys = sort keys( %index );
+ foreach my $key( @mykeys ){
+ print DESTFILE ( $index{ $key } , "\n" );
+ }
+ close DESTFILE;
+ }else {
+ print STDOUT "WARNING: File $localizeFile is not writable , try to merge ...\n";
+ my ( $TMPFILE , $tmpfile ) = File::Temp::tempfile();
+ if( open DESTFILE , "+> $tmpfile " ){
+ @mykeys = keys( %index );
+ foreach my $key( @mykeys ){
+ print DESTFILE ( $index{ $key } , "\n" );
+ }
+ close DESTFILE;
+ if( move( $localizeFile , $localizeFile.".backup" ) ){
+ if( copy( $tmpfile , $localizeFile ) ){
+ unlink $localizeFile.".backup";
+ } else { print STDERR "Can't open/create '$localizeFile', original file is renamed to $localizeFile.backup\n"; }
+ } else { print STDERR "Can't open/create '$localizeFile'\n"; }
+ }else{
+ print STDERR "WARNING: Can't open/create '$localizeFile'\n";
+ }
+ unlink $tmpfile;
+ }
+ }
+# if( $no_sort eq '' ){
+# sort_outfile( $localizeFile );
+# }
+}
+
+sub get_license_header{
+ return
+"#\n".
+"# #### ### # # ### ##### ##### #### ##### ##### \n".
+"# # # # # ## # # # # # # # # # \n".
+"# # # # # # # # # # # ### # # # # \n".
+"# # # # # # ## # # # # # # # # \n".
+"# #### ### # # ### # ##### #### ##### # \n".
+"#\n".
+"# DO NOT EDIT! This file will be overwritten by localisation process\n".
+"#\n".
+"#*************************************************************************\n".
+"#\n".
+"# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.\n".
+"# \n".
+"# Copyright 2008 by Sun Microsystems, Inc.\n".
+"#\n".
+"# OpenOffice.org - a multi-platform office productivity suite\n".
+"#\n".
+"# \$RCSfile:".
+"localize.pl,v \$\n".
+"#\n".
+"# \$Revision: ".
+"1.17.4.1 \$\n".
+"#\n".
+"# This file is part of OpenOffice.org.\n".
+"#\n".
+"# OpenOffice.org is free software: you can redistribute it and/or modify\n".
+"# it under the terms of the GNU Lesser General Public License version 3\n".
+"# only, as published by the Free Software Foundation.\n".
+"#\n".
+"# OpenOffice.org is distributed in the hope that it will be useful,\n".
+"# but WITHOUT ANY WARRANTY; without even the implied warranty of\n".
+"# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n".
+"# GNU Lesser General Public License version 3 for more details\n".
+"# (a copy is included in the LICENSE file that accompanied this code).\n".
+"#\n".
+"# You should have received a copy of the GNU Lesser General Public License\n".
+"# version 3 along with OpenOffice.org. If not, see\n".
+"# <http://www.openoffice.org/license.html>\n".
+"# for a copy of the LGPLv3 License.\n".
+"#\n".
+"#*************************************************************************\n";
+}
+######## Check input sdf file and use only the correct part
+sub merge_gsicheck{
+ my $command = '';
+ my ( $TMPHANDLE , $tmpfile ) = File::Temp::tempfile();
+ my ( $TMPHANDLE2 , $tmpfile2 ) = File::Temp::tempfile();
+ close ( $TMPHANDLE );
+ close ( $TMPHANDLE2 );
+
+ unlink $tmpfile2;
+ my $output2 = `cat $sdffile | sort > $tmpfile2`;
+ my $rc2 = $? << 8;
+ if( $rc2 ne 0 ){
+ printf("ERROR: Failed -> cat $sdffile | sort > $tmpfile2\n$output2\n");
+ exit( -1 );
+ }
+
+# if( $ENV{WRAPCMD} ){
+# $command = "$ENV{WRAPCMD} gsicheck";
+# }else{
+# $command = "gsicheck";
+# }
+# my $errfile = $tmpfile.".err";
+# $command .= " -k -c -wcf $tmpfile -wef $errfile -l \"\" $tmpfile2";
+# my $output = `$command`;
+# my $rc = $? << 8;
+# if ( $output ne "" ){
+# print STDOUT "### gsicheck ###\n";
+# print STDOUT "### The file $errfile have been written containing the errors in your sdf file. Those lines will not be merged: ###\n\n";
+# print STDOUT "$output\n";
+# print STDOUT "################\n";
+#
+# }else{
+# # Remove the 0 Byte file
+# unlink $errfile;
+# }
+ $sdffile = $tmpfile2;
+# unlink $tmpfile2;
+}
+#########################################################
+sub collectfiles{
+ print STDOUT "### Localize\n";
+ my @sdfparticles;
+ my $localizehash_ref;
+ my ( $bAll , $bUseLocalize, $langhash_ref , $bHasSourceLanguage , $bFakeEnglish ) = parseLanguages();
+
+ # Enable autoflush on STDOUT
+ # $| = 1;
+ STDOUT->autoflush( 1 );
+
+ ### Search sdf particles
+ print STDOUT "### Searching sdf particles\n";
+ my $working_path = getcwd();
+ chdir $srcpath;
+ find sub {
+ my $file = $File::Find::name;
+ if( -f && $file =~ /.*localize.sdf$/ ) {
+ push @sdfparticles , $file;
+ if( $bVerbose eq "1" ) { print STDOUT "$file\n"; }
+ else { print "."; }
+
+ }
+ } , getcwd() ;#"."; #$srcpath;
+ chdir $working_path;
+
+ my $nFound = $#sdfparticles +1;
+ print "\n $nFound files found !\n";
+
+ my ( $LOCALIZEPARTICLE , $localizeSDF ) = File::Temp::tempfile();
+ close( $LOCALIZEPARTICLE );
+
+ my ( $ALLPARTICLES_MERGED , $particleSDF_merged ) = File::Temp::tempfile();
+ close( $ALLPARTICLES_MERGED );
+ my ( $LOCALIZE_LOG , $my_localize_log ) = File::Temp::tempfile();
+ close( $LOCALIZE_LOG );
+
+ ## Get the localize de,en-US extract
+ if( $bAll || $bUseLocalize ){
+ print "### Fetching source language strings\n";
+ my $command = "";
+ my $args = "";
+
+ if( $ENV{WRAPCMD} ){
+ $command = "$ENV{WRAPCMD} localize_sl";
+ }else{
+ $command = "localize_sl";
+ }
+
+ # -e
+ # if ( -x $command ){
+ if( $command ){
+ if( !$bVerbose ){ $args .= " -QQ -skip_links "; }
+ $args .= " -e -f $localizeSDF -l ";
+ my $bFlag="";
+ if( $bAll ) {$args .= " en-US";}
+ else{
+ my @list;
+ foreach my $isokey ( keys( %{ $langhash_ref } ) ){
+ push @list , $isokey;
+ if( $langhash_ref->{ $isokey } ne "" ){
+ push @list , $langhash_ref->{ $isokey };
+ }
+ }
+ remove_duplicates( \@list );
+ foreach my $isokey ( @list ){
+ switch :{
+ #( $isokey=~ /^de$/i )
+ # && do{
+ # if( $bFlag eq "TRUE" ){ $args .= ",de"; }
+ # else {
+ # $args .= "de"; $bFlag = "TRUE";
+ # }
+ # };
+ ( $isokey=~ /^en-US$/i )
+ && do{
+ if( $bFlag eq "TRUE" ){ $args .= ",en-US"; }
+ else {
+ $args .= "en-US"; $bFlag = "TRUE";
+ }
+ };
+
+ } #switch
+ } #foreach
+ } # if
+ } # if
+# if ( !$bVerbose ){
+# if ( $WIN eq "TRUE" ) { $args .= " > $my_localize_log"; }
+# else { $args .= " >& $my_localize_log"; }
+# }
+ if ( $bVerbose ) { print STDOUT $command.$args."\n"; }
+
+ my $rc = system( $command.$args );
+
+ #my $output = `$command.$args`;
+ #my $rc = $? << 8;
+
+ if( $rc < 0 ){ print STDERR "ERROR: localize rc = $rc\n"; exit( -1 ); }
+ ( $localizehash_ref ) = read_file( $localizeSDF , $langhash_ref );
+
+ }
+ ## Get sdf particles
+ open ALLPARTICLES_MERGED , "+>> $particleSDF_merged"
+ or die "Can't open $particleSDF_merged";
+
+ ## Fill fackback hash
+ my( $fallbackhashhash_ref ) = fetch_fallback( \@sdfparticles , $localizeSDF , $langhash_ref );
+# my( $fallbackhashhash_ref ) = fetch_fallback( \@sdfparticles , $localizeSDF , $langhash_ref );
+ my %block;
+ my $cur_fallback;
+ if( !$bAll) {
+ foreach my $cur_lang ( keys( %{ $langhash_ref } ) ){
+ #print STDOUT "DBG: G1 cur_lang=$cur_lang\n";
+ $cur_fallback = $langhash_ref->{ $cur_lang };
+ if( $cur_fallback ne "" ){
+ # Insert fallback strings
+ #print STDOUT "DBG: Renaming $cur_fallback to $cur_lang in fallbackhash\n";
+ rename_language( $fallbackhashhash_ref , $cur_fallback , $cur_lang );
+ }
+ foreach my $currentfile ( @sdfparticles ){
+ if ( open MYFILE , "< $currentfile" ) {
+ while(<MYFILE>){
+ if( /$sdf_regex/ ){
+ my $line = defined $_ ? $_ : '';
+ my $prj = defined $3 ? $3 : '';
+ my $file = defined $4 ? $4 : '';
+ my $type = defined $6 ? $6 : '';
+ my $gid = defined $7 ? $7 : '';
+ my $lid = defined $8 ? $8 : '';
+ my $lang = defined $12 ? $12 : '';
+ my $plattform = defined $10 ? $10 : '';
+ my $helpid = defined $9 ? $9 : '';
+
+ chomp( $line );
+
+ if ( $lang eq $cur_lang ){
+ # Overwrite fallback strings with collected strings
+ #if( ( !has_two_sourcelanguages( $cur_lang) && $cur_lang eq "de" ) || $cur_lang ne "en-US" ){
+ $fallbackhashhash_ref->{ $cur_lang }{ $prj.$gid.$lid.$file.$type.$plattform.$helpid } = $line ;
+ #}
+
+ }
+ }
+ }
+ }else { print STDERR "WARNING: Can't open file $currentfile"; }
+ }
+
+ foreach my $line ( keys( %{$fallbackhashhash_ref->{ $cur_lang } } )) {
+ if( #$cur_lang ne "de" &&
+ $cur_lang ne "en-US" ){
+ print ALLPARTICLES_MERGED ( $fallbackhashhash_ref->{ $cur_lang }{ $line }, "\n" );
+ }
+ }
+ }
+ } else {
+ foreach my $currentfile ( @sdfparticles ){
+ if ( open MYFILE , "< $currentfile" ) {
+ while( <MYFILE> ){
+ print ALLPARTICLES_MERGED ( $_, "\n" ); # recheck de / en-US !
+ }
+ }
+ else { print STDERR "WARNING: Can't open file $currentfile"; }
+ }
+ }
+ close ALLPARTICLES_MERGED;
+
+
+ # Hash of array
+ my %output;
+ my @order;
+
+ ## Join both
+ if( $outputfile ){
+ if( open DESTFILE , "+> $outputfile" ){
+ if( !open LOCALIZEPARTICLE , "< $localizeSDF" ) { print STDERR "ERROR: Can't open file $localizeSDF\n"; }
+ if( !open ALLPARTICLES_MERGED , "< $particleSDF_merged" ) { print STDERR "ERROR: Can't open file $particleSDF_merged\n"; }
+
+ # Insert localize
+ my $extract_date="";
+ while ( <LOCALIZEPARTICLE> ){
+ if( /$sdf_regex/ ){
+ my $leftpart = defined $2 ? $2 : '';
+ my $lang = defined $12 ? $12 : '';
+ my $rightpart = defined $13 ? $13 : '';
+ my $timestamp = defined $18 ? $18 : '';
+
+ my $prj = defined $3 ? $3 : '';
+ my $file = defined $4 ? $4 : '';
+ my $type = defined $6 ? $6 : '';
+ my $gid = defined $7 ? $7 : '';
+ my $lid = defined $8 ? $8 : '';
+ #my $lang = defined $12 ? $12 : '';
+ my $plattform = defined $10 ? $10 : '';
+ my $helpid = defined $9 ? $9 : '';
+
+
+ if( $use_default_date )
+ {
+ $extract_date = "$default_date\n" ;
+ }
+ elsif( $extract_date eq "" ) {
+ $extract_date = $timestamp ;
+ $extract_date =~ tr/\r\n//d;
+ $extract_date .= "\n";
+ }
+
+ if( $bAll ){ print DESTFILE $leftpart."\t".$lang."\t".$rightpart.$extract_date ; }
+ else {
+ foreach my $sLang ( keys( %{ $langhash_ref } ) ){
+ if( $sLang=~ /all/i ) {
+ push @{ $output{ $prj.$gid.$lid.$file.$type.$plattform.$helpid } } , $leftpart."\t".$lang."\t".$rightpart.$extract_date ;
+ #print DESTFILE $leftpart."\t".$lang."\t".$rightpart.$extract_date;
+ }
+ #if( $sLang eq "de" && $lang eq "de" ) {
+ # push @{ $output{ $prj.$gid.$lid.$file.$type.$plattform.$helpid } } , $leftpart."\t".$lang."\t".$rightpart.$extract_date ;
+ #print DESTFILE $leftpart."\t".$lang."\t".$rightpart.$extract_date;
+ #}
+ if( $sLang eq "en-US" && $lang eq "en-US" ) {
+ push @order , $prj.$gid.$lid.$file.$type.$plattform.$helpid;
+ if( !$bFakeEnglish ){ push @{ $output{ $prj.$gid.$lid.$file.$type.$plattform.$helpid } } , $leftpart."\t".$lang."\t".$rightpart.$extract_date ; }
+ #print DESTFILE $leftpart."\t".$lang."\t".$rightpart.$extract_date;
+ }
+
+ }
+ }
+ }
+ }
+ # Insert particles
+ while ( <ALLPARTICLES_MERGED> ){
+ if( /$sdf_regex/ ){
+ my $leftpart = defined $2 ? $2 : '';
+ my $prj = defined $3 ? $3 : '';
+ my $lang = defined $12 ? $12 : '';
+ my $rightpart = defined $13 ? $13 : '';
+ my $timestamp = defined $18 ? $18 : '';
+
+ #my $prj = defined $3 ? $3 : '';
+ my $file = defined $4 ? $4 : '';
+ my $type = defined $6 ? $6 : '';
+ my $gid = defined $7 ? $7 : '';
+ my $lid = defined $8 ? $8 : '';
+ #my $lang = defined $12 ? $12 : '';
+ my $plattform = defined $10 ? $10 : '';
+ my $helpid = defined $9 ? $9 : '';
+
+
+ if( $use_default_date )
+ {
+ $extract_date = "$default_date\n" ;
+ }
+ elsif( $extract_date eq "" )
+ {
+ $extract_date = $timestamp;
+ }
+
+ if( ! ( $prj =~ /binfilter/i ) ) {
+ push @{ $output{ $prj.$gid.$lid.$file.$type.$plattform.$helpid } } , $leftpart."\t".$lang."\t".$rightpart.$extract_date ;
+ #print DESTFILE $leftpart."\t".$lang."\t".$rightpart.$extract_date ;
+ }
+ }
+ }
+
+ # Write!
+ foreach my $curkey ( @order ){
+ foreach my $curlist ( $output{ $curkey } ){
+ foreach my $line ( @{$curlist} ){
+ print DESTFILE $line;
+ }
+ }
+ }
+
+ }else { print STDERR "Can't open $outputfile";}
+ }
+ close DESTFILE;
+ close LOCALIZEPARTICLE;
+ close ALLPARTICLES_MERGED;
+
+ #print STDOUT "DBG: \$localizeSDF $localizeSDF \$particleSDF_merged $particleSDF_merged\n";
+ unlink $localizeSDF , $particleSDF_merged , $my_localize_log;
+
+ #sort_outfile( $outputfile );
+ #remove_obsolete( $outputfile ) , if $bHasSourceLanguage ne "";
+ }
+
+#########################################################
+sub remove_obsolete{
+ my $outfile = shift;
+ my @lines;
+ my $enusleftpart;
+ my @good_lines;
+
+ print STDOUT "### Removing obsolete strings\n";
+
+ # Kick out all strings without en-US reference
+ if ( open ( SORTEDFILE , "< $outfile" ) ){
+ while( <SORTEDFILE> ){
+ if( /$sdf_regex/ ){
+ my $line = defined $_ ? $_ : '';
+ my $language = defined $12 ? $12 : '';
+ my $prj = defined $3 ? $3 : '';
+ my $file = defined $4 ? $4 : '';
+ my $type = defined $6 ? $6 : '';
+ my $gid = defined $7 ? $7 : '';
+ my $lid = defined $8 ? $8 : '';
+ my $plattform = defined $10 ? $10 : '';
+ my $helpid = defined $9 ? $9 : '';
+
+ my $leftpart = $prj.$gid.$lid.$file.$type.$plattform.$helpid;
+
+ if( $language eq "en-US" ){ # source string found, 1. entry
+ $enusleftpart = $leftpart;
+ push @good_lines , $line;
+ }else{
+ if( !defined $enusleftpart or !defined $leftpart ){
+ print STDERR "BADLINE: $line\n";
+ print STDERR "\$enusleftpart = $enusleftpart\n";
+ print STDERR "\$leftpart = $leftpart\n";
+ }
+ if( $enusleftpart eq $leftpart ){ # matching language
+ push @good_lines , $line;
+ }
+ #else{
+ # print STDERR "OUT: \$enusleftpart=$enusleftpart \$leftpart=$leftpart \$line=$line\n";
+ #}
+ }
+ }
+ }
+ close SORTEDFILE;
+ } else { print STDERR "ERROR: Can't open file $outfile\n";}
+
+ # Write file
+ if ( open ( SORTEDFILE , "> $outfile" ) ){
+ foreach my $newline ( @good_lines ) {
+ print SORTEDFILE $newline;
+ }
+ close SORTEDFILE;
+ } else { print STDERR "ERROR: Can't open file $outfile\n";}
+
+}
+#########################################################
+sub sort_outfile{
+ my $outfile = shift;
+ print STDOUT "### Sorting ... $outfile ...";
+ my @lines;
+ my @sorted_lines;
+
+
+ #if ( open ( SORTEDFILE , "< $outputfile" ) ){
+ if ( open ( SORTEDFILE , "< $outfile" ) ){
+ my $line;
+ while ( <SORTEDFILE> ){
+ $line = $_;
+ if( $line =~ /^[^\#]/ ){
+ push @lines , $line;
+ }
+ }
+ close SORTEDFILE;
+ @sorted_lines = sort {
+ my $xa_lang = "";
+ my $xa_left_part = "";
+ my $xa_right_part = "";
+ my $xa_timestamp = "";
+ my $xb_lang = "";
+ my $xb_left_part = "";
+ my $xb_right_part = "";
+ my $xb_timestamp = "";
+ my $xa = "";
+ my $xb = "";
+ my @alist;
+ my @blist;
+
+ if( $a=~ /$sdf_regex/ ){
+ $xa_left_part = defined $2 ? $2 : '';
+ $xa_lang = defined $12 ? $12 : '';
+ $xa_right_part = defined $13 ? $13 : '';
+ $xa_left_part = remove_last_column( $xa_left_part );
+
+ }
+ if( $b=~ /$sdf_regex/ ){
+ $xb_left_part = defined $2 ? $2 : '';
+ $xb_lang = defined $12 ? $12 : '';
+ $xb_right_part = defined $13 ? $13 : '';
+ $xb_left_part = remove_last_column( $xb_left_part );
+
+
+ }
+ if( ( $xa_left_part cmp $xb_left_part ) == 0 ){ # Left part equal
+ if( ( $xa_lang cmp $xb_lang ) == 0 ){ # Lang equal
+ return ( $xa_right_part cmp $xb_right_part ); # Right part compare
+ }
+ elsif( $xa_lang eq "en-US" ) { return -1; } # en-US wins
+ elsif( $xb_lang eq "en-US" ) { return 1; } # en-US wins
+ else { return $xa_lang cmp $xb_lang; } # lang compare
+ }
+ else {
+ return $xa_left_part cmp $xb_left_part; # Left part compare
+ }
+ } @lines;
+
+ if ( open ( SORTEDFILE , "> $outfile" ) ){
+ print SORTEDFILE get_license_header();
+ foreach my $newline ( @sorted_lines ) {
+ print SORTEDFILE $newline;
+ #print STDOUT $newline;
+ }
+ }
+ close SORTEDFILE;
+ } else { print STDERR "WARNING: Can't open file $outfile\n";}
+ print "done\n";
+
+}
+#########################################################
+sub remove_last_column{
+ my $string = shift;
+ my @alist = split ( "\t" , $string );
+ pop @alist;
+ return join( "\t" , @alist );
+}
+
+#########################################################
+sub rename_language{
+ my $fallbackhashhash_ref = shift;
+ my $cur_fallback = shift;
+ my $cur_lang = shift;
+ my $line;
+
+ foreach my $key( keys ( %{ $fallbackhashhash_ref->{ $cur_fallback } } ) ){
+ $line = $fallbackhashhash_ref->{ $cur_fallback }{ $key };
+ if( $line =~ /$sdf_regex/ ){
+ my $leftpart = defined $2 ? $2 : '';
+ my $lang = defined $12 ? $12 : '';
+ my $rightpart = defined $13 ? $13 : '';
+
+ $fallbackhashhash_ref->{ $cur_lang }{ $key } = $leftpart."\t".$cur_lang."\t".$rightpart;
+ }
+ }
+}
+
+############################################################
+sub remove_duplicates{
+ my $list_ref = shift;
+ my %tmphash;
+ foreach my $key ( @{ $list_ref } ){ $tmphash{ $key } = '' ; }
+ @{$list_ref} = keys( %tmphash );
+}
+
+##############################################################
+sub fetch_fallback{
+ my $sdfparticleslist_ref = shift;
+ my $localizeSDF = shift;
+ my $langhash_ref = shift;
+ my %fallbackhashhash;
+ my $cur_lang;
+ my @langlist;
+
+ foreach my $key ( keys ( %{ $langhash_ref } ) ){
+ $cur_lang = $langhash_ref->{ $key };
+ if ( $cur_lang ne "" ) {
+ push @langlist , $cur_lang;
+ }
+ }
+ remove_duplicates( \@langlist );
+ foreach $cur_lang ( @langlist ){
+ if( $cur_lang eq "en-US" ){
+ read_fallbacks_from_source( $localizeSDF , $cur_lang , \%fallbackhashhash );
+ }
+ }
+
+ # remove de / en-US
+ my @tmplist;
+ foreach $cur_lang( @langlist ){
+ if( $cur_lang ne "en-US" ){
+ push @tmplist , $cur_lang;
+
+ }
+ }
+ @langlist = @tmplist;
+ if ( $#langlist +1 ){
+ read_fallbacks_from_particles( $sdfparticleslist_ref , \@langlist , \%fallbackhashhash );
+
+ }
+ return (\%fallbackhashhash);
+}
+
+#########################################################
+sub write_file{
+
+ my $localizeFile = shift;
+ my $index_ref = shift;
+
+ if( open DESTFILE , "+> $localizeFile" ){
+ foreach my $key( %{ $index_ref } ){
+ print DESTFILE ($index_ref->{ $key }, "\n" );
+ }
+ close DESTFILE;
+ }else {
+ print STDERR "Can't open/create '$localizeFile'";
+ }
+}
+
+#########################################################
+sub read_file{
+
+ my $sdffile = shift;
+ my $langhash_ref = shift;
+ my %block = ();
+
+ open MYFILE , "< $sdffile"
+ or die "Can't open '$sdffile'\n";
+ while( <MYFILE>){
+ if( /$sdf_regex/ ){
+ my $line = defined $_ ? $_ : '';
+ my $prj = defined $3 ? $3 : '';
+ my $file = defined $4 ? $4 : '';
+ my $type = defined $6 ? $6 : '';
+ my $gid = defined $7 ? $7 : '';
+ my $lid = defined $8 ? $8 : '';
+ my $plattform = defined $10 ? $10 : '';
+ my $lang = defined $12 ? $12 : '';
+ my $helpid = defined $9 ? $9 : '';
+
+ foreach my $isolang ( keys ( %{ $langhash_ref } ) ){
+ if( $isolang=~ /$lang/i || $isolang=~ /all/i ) { $block{$prj.$gid.$lid.$file.$type.$plattform.$helpid } = $line ; }
+ }
+ }
+ }
+ return (\%block);
+}
+
+#########################################################
+sub read_fallbacks_from_particles{
+
+ my $sdfparticleslist_ref = shift;
+ my $isolanglist_ref = shift;
+ my $fallbackhashhash_ref = shift;
+ my $block_ref;
+ foreach my $currentfile ( @{ $sdfparticleslist_ref } ){
+ if ( open MYFILE , "< $currentfile" ) {
+ while(<MYFILE>){
+ if( /$sdf_regex/ ){
+ my $line = defined $_ ? $_ : '';
+ my $prj = defined $3 ? $3 : '';
+ my $file = defined $4 ? $4 : '';
+ my $type = defined $6 ? $6 : '';
+ my $gid = defined $7 ? $7 : '';
+ my $lid = defined $8 ? $8 : '';
+ my $lang = defined $12 ? $12 : '';
+ my $plattform = defined $10 ? $10 : '';
+ my $helpid = defined $9 ? $9 : '';
+
+ chomp( $line );
+
+ foreach my $isolang ( @{$isolanglist_ref} ){
+ if( $isolang=~ /$lang/i ) {
+ $fallbackhashhash_ref->{ $isolang }{ $prj.$gid.$lid.$file.$type.$plattform.$helpid } = $line ;
+ }
+ }
+ }
+ }
+ }else { print STDERR "WARNING: Can't open file $currentfile"; }
+ }
+}
+
+#########################################################
+sub read_fallbacks_from_source{
+
+ my $sdffile = shift;
+ my $isolang = shift;
+ my $fallbackhashhash_ref = shift;
+ my $block_ref;
+ # read fallback for single file
+ open MYFILE , "< $sdffile"
+ or die "Can't open '$sdffile'\n";
+
+ while( <MYFILE>){
+ if( /$sdf_regex/ ){
+ my $line = defined $_ ? $_ : '';
+ my $prj = defined $3 ? $3 : '';
+ my $file = defined $4 ? $4 : '';
+ my $type = defined $6 ? $6 : '';
+ my $gid = defined $7 ? $7 : '';
+ my $lid = defined $8 ? $8 : '';
+ my $helpid = defined $9 ? $9 : '';
+ my $lang = defined $12 ? $12 : '';
+ my $plattform = defined $10 ? $10 : '';
+
+ chomp( $line );
+ if( $isolang=~ /$lang/i ) { $fallbackhashhash_ref->{ $isolang }{ $prj.$gid.$lid.$file.$type.$plattform.$helpid } = $line ;
+ }
+ }
+ }
+}
+
+#########################################################
+sub parseLanguages{
+
+ my $bAll;
+ my $bUseLocalize;
+ my $bHasSourceLanguage="";
+ my $bFakeEnglish="";
+ my %langhash;
+ my $iso="";
+ my $fallback="";
+
+ #### -l all
+ if( $languages=~ /all/ ){
+ $bAll = "TRUE";
+ $bHasSourceLanguage = "TRUE";
+ }
+ ### -l fr=de,de
+ elsif( $languages=~ /.*,.*/ ){
+ my @tmpstr = split "," , $languages;
+ for my $lang ( @tmpstr ){
+ if( $lang=~ /([a-zA-Z]{2,3}(-[a-zA-Z\-]*)*)(=([a-zA-Z]{2,3}(-[a-zA-Z\-]*)*))?/ ){
+ $iso = $1;
+ $fallback = $4;
+
+ if( ( $iso && $iso=~ /(en-US)/i ) || ( $fallback && $fallback=~ /(en-US)/i ) ) {
+ $bUseLocalize = "TRUE";
+ }
+ if( ( $iso && $iso=~ /(en-US)/i ) ) {
+ $bHasSourceLanguage = "TRUE";
+ }
+ if( $fallback ) { $langhash{ $iso } = $fallback; }
+ else { $langhash{ $iso } = ""; }
+ }
+ }
+ }
+ ### -l de
+ else{
+ if( $languages=~ /([a-zA-Z]{2,3}(-[a-zA-Z\-]*)*)(=([a-zA-Z]{2,3}(-[a-zA-Z\-]*)*))?/ ){
+ $iso = $1;
+ $fallback = $4;
+
+ if( ( $iso && $iso=~ /(en-US)/i ) || ( $fallback && $fallback=~ /(en-US)/i ) ) {
+ $bUseLocalize = "TRUE";
+
+ }
+ if( ( $iso && $iso=~ /(en-US)/i ) ) {
+ $bHasSourceLanguage = "TRUE";
+ }
+
+ if( $fallback ) { $langhash{ $iso } = $fallback; }
+ else { $langhash{ $iso } = ""; }
+ }
+ }
+ # HACK en-US always needed!
+ if( !$bHasSourceLanguage ){
+ #$bHasSourceLanguage = "TRUE";
+ $bUseLocalize = "TRUE";
+ $bFakeEnglish = "TRUE";
+ $langhash{ "en-US" } = "";
+ }
+ return ( $bAll , $bUseLocalize , \%langhash , $bHasSourceLanguage, $bFakeEnglish);
+}
+
+#########################################################
+sub parse_options{
+
+ my $help;
+ my $merge;
+ my $extract;
+ my $success = GetOptions('f=s' => \$sdffile , 'l=s' => \$languages , 's=s' => \$srcpath , 'h' => \$help , 'v' => \$bVerbose ,
+ 'm' => \$merge , 'e' => \$extract , 'x' => \$no_sort , 'd' => \$use_default_date );
+ $outputfile = $sdffile;
+
+ #print STDOUT "DBG: lang = $languages\n";
+ if( !$srcpath ){
+ #$srcpath = "$ENV{SRC_ROOT}";
+ if( !$srcpath ){
+ print STDERR "No path to the source root found!\n\n";
+ usage();
+ exit(1);
+ }
+ }
+ if( $help || !$success || $#ARGV > 1 || ( !$sdffile ) ){
+ usage();
+ exit(1);
+ }
+ if( $merge && $sdffile && ! ( -r $sdffile)){
+ print STDERR "Can't open file '$sdffile'\n";
+ exit(1);
+ }
+ if( !( $languages=~ /[a-zA-Z]{2,3}(-[a-zA-Z\-]*)*(=[a-zA-Z]{2,3}(-[a-zA-Z\-]*)*)?(,[a-zA-Z]{2,3}(-[a-zA-Z\-]*)*(=[a-zA-Z]{2,3}(-[a-zA-Z\-]*)*)?)*/ ) ){
+ print STDERR "Please check the -l iso code\n";
+ exit(1);
+ }
+ if( ( !$merge && !$extract ) || ( $merge && $extract ) ){ usage();exit( -1 );}
+ if( $extract ){ $mode = "extract"; }
+ else { $mode = "merge"; }
+}
+
+#########################################################
+sub usage{
+
+ print STDERR "Usage: localize.pl\n";
+ print STDERR "Split or collect SDF files\n";
+ print STDERR " merge: -m -f <sdffile> -l l1[=f1][,l2[=f2]][...] [ -s <sourceroot> ]\n";
+ print STDERR " extract: -e -f <outputfile> -l <lang> [ -s <sourceroot> ] [-d]\n";
+ print STDERR "Options:\n";
+ print STDERR " -h help\n";
+ print STDERR " -m Merge mode\n";
+ print STDERR " -e Extract mode\n";
+ print STDERR " -f <sdffile> To split a big SDF file into particles\n";
+ print STDERR " <outputfile> To collect and join all particles to one big file\n";
+ print STDERR " -s <sourceroot> Path to the modules, if no \$SRC_ROOT is set\n";
+ print STDERR " -l ( all | <isocode> | <isocode>=fallback ) comma seperated languages\n";
+ print STDERR " -d Use default date in extracted sdf file\n";
+ print STDERR " -v Verbose\n";
+ print STDERR "\nExample:\n";
+ print STDERR "\nlocalize -e -l en-US,pt-BR=en-US -f my.sdf\n( Extract en-US and pt-BR with en-US fallback )\n";
+ print STDERR "\nlocalize -m -l cs -f my.sdf\n( Merge cs translation into the sourcecode ) \n";
+}
+
+# my $line = defined $_ ? $_ : '';
+# my $leftpart = defined $2 ? $2 : '';
+# my $prj = defined $3 ? $3 : '';
+# my $file = defined $4 ? $4 : '';
+# my $dummy = defined $5 ? $5 : '';
+# my $type = defined $6 ? $6 : '';
+# my $gid = defined $7 ? $7 : '';
+# my $lid = defined $8 ? $8 : '';
+# my $helpid = defined $9 ? $9 : '';
+# my $plattform = defined $10 ? $10 : '';
+# my $width = defined $11 ? $11 : '';
+# my $lang = defined $12 ? $12 : '';
+# my $rightpart = defined $13 ? $13 : '';
+# my $text = defined $14 ? $14 : '';
+# my $helptext = defined $15 ? $15 : '';
+# my $quickhelptext = defined $16 ? $16 : '';
+# my $title = defined $17 ? $17 : '';
+# my $timestamp = defined $18 ? $18 : '';
+
diff --git a/transex3/source/cfgmerge.cxx b/transex3/source/cfgmerge.cxx
index 21b4aeff185d..0607c9e9bb06 100644
--- a/transex3/source/cfgmerge.cxx
+++ b/transex3/source/cfgmerge.cxx
@@ -172,10 +172,6 @@ extern char *GetOutputFile( int argc, char* argv[])
Export::sLanguages = ByteString( argv[ i ]);
}
break;
- case STATE_ISOCODE99: {
- Export::sIsoCode99 = ByteString( argv[ i ]);
- }
- break;
}
}
}
diff --git a/transex3/source/export2.cxx b/transex3/source/export2.cxx
index 5db1067a7afb..7815e80e033f 100644
--- a/transex3/source/export2.cxx
+++ b/transex3/source/export2.cxx
@@ -42,6 +42,7 @@
#include <iomanip>
#include <tools/urlobj.hxx>
#include <time.h>
+#include <stdlib.h>
using namespace std;
//
@@ -93,7 +94,7 @@ ResData::~ResData()
/*****************************************************************************/
ByteString Export::sLanguages;
ByteString Export::sForcedLanguages;
-ByteString Export::sIsoCode99;
+//ByteString Export::sIsoCode99;
/*****************************************************************************/
void Export::DumpExportList( ByteString& sListName , ExportList& aList ){
@@ -648,6 +649,16 @@ int Export::getCurrentDirectory( rtl::OUString& base_fqurl_out, rtl::OUString& b
return osl::File::getFileURLFromSystemPath( base_out , base_fqurl_out );
}
+void Export::getCurrentDir( string& dir )
+{
+ char buffer[64000];
+ if( getcwd( buffer , sizeof( buffer ) ) == 0 ){
+ cerr << "Error: getcwd failed!\n";
+ exit( -1 );
+ }
+ dir = string( buffer );
+}
+
// Stolen from sal/osl/unx/tempfile.c
diff --git a/transex3/source/hw2fw.cxx b/transex3/source/hw2fw.cxx
deleted file mode 100644
index dd77b8d9210c..000000000000
--- a/transex3/source/hw2fw.cxx
+++ /dev/null
@@ -1,202 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * $RCSfile: hw2fw.cxx,v $
- * $Revision: 1.4 $
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_transex3.hxx"
-#include <tools/string.hxx>
-
-struct hw_pair
-{
- sal_Unicode nFrom;
- sal_Unicode nTo;
-};
-
-#define MAKE_PAIR(a,b) { a, b }
-
-static struct hw_pair aHWPairs[] =
-{
- MAKE_PAIR( 0xFF65, 0x30FB ), // HALFWIDTH KATAKANA MIDDLE DOT --> KATAKANA MIDDLE DOT
- MAKE_PAIR( 0xFF66, 0x30F2 ), // HALFWIDTH KATAKANA LETTER WO --> KATAKANA LETTER WO
- MAKE_PAIR( 0xFF67, 0x30A1 ), // HALFWIDTH KATAKANA LETTER SMALL A --> KATAKANA LETTER SMALL A
- MAKE_PAIR( 0xFF68, 0x30A3 ), // HALFWIDTH KATAKANA LETTER SMALL I --> KATAKANA LETTER SMALL I
- MAKE_PAIR( 0xFF69, 0x30A5 ), // HALFWIDTH KATAKANA LETTER SMALL U --> KATAKANA LETTER SMALL U
- MAKE_PAIR( 0xFF6A, 0x30A7 ), // HALFWIDTH KATAKANA LETTER SMALL E --> KATAKANA LETTER SMALL E
- MAKE_PAIR( 0xFF6B, 0x30A9 ), // HALFWIDTH KATAKANA LETTER SMALL O --> KATAKANA LETTER SMALL O
- MAKE_PAIR( 0xFF6C, 0x30E3 ), // HALFWIDTH KATAKANA LETTER SMALL YA --> KATAKANA LETTER SMALL YA
- MAKE_PAIR( 0xFF6D, 0x30E5 ), // HALFWIDTH KATAKANA LETTER SMALL YU --> KATAKANA LETTER SMALL YU
- MAKE_PAIR( 0xFF6E, 0x30E7 ), // HALFWIDTH KATAKANA LETTER SMALL YO --> KATAKANA LETTER SMALL YO
- MAKE_PAIR( 0xFF6F, 0x30C3 ), // HALFWIDTH KATAKANA LETTER SMALL TU --> KATAKANA LETTER SMALL TU
- MAKE_PAIR( 0xFF70, 0x30FC ), // HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK --> KATAKANA-HIRAGANA PROLONGED SOUND MARK
- MAKE_PAIR( 0xFF71, 0x30A2 ), // HALFWIDTH KATAKANA LETTER A --> KATAKANA LETTER A
- MAKE_PAIR( 0xFF72, 0x30A4 ), // HALFWIDTH KATAKANA LETTER I --> KATAKANA LETTER I
- MAKE_PAIR( 0xFF73, 0x30A6 ), // HALFWIDTH KATAKANA LETTER U --> KATAKANA LETTER U
- MAKE_PAIR( 0xFF74, 0x30A8 ), // HALFWIDTH KATAKANA LETTER E --> KATAKANA LETTER E
- MAKE_PAIR( 0xFF75, 0x30AA ), // HALFWIDTH KATAKANA LETTER O --> KATAKANA LETTER O
- MAKE_PAIR( 0xFF76, 0x30AB ), // HALFWIDTH KATAKANA LETTER KA --> KATAKANA LETTER KA
- MAKE_PAIR( 0xFF77, 0x30AD ), // HALFWIDTH KATAKANA LETTER KI --> KATAKANA LETTER KI
- MAKE_PAIR( 0xFF78, 0x30AF ), // HALFWIDTH KATAKANA LETTER KU --> KATAKANA LETTER KU
- MAKE_PAIR( 0xFF79, 0x30B1 ), // HALFWIDTH KATAKANA LETTER KE --> KATAKANA LETTER KE
- MAKE_PAIR( 0xFF7A, 0x30B3 ), // HALFWIDTH KATAKANA LETTER KO --> KATAKANA LETTER KO
- MAKE_PAIR( 0xFF7B, 0x30B5 ), // HALFWIDTH KATAKANA LETTER SA --> KATAKANA LETTER SA
- MAKE_PAIR( 0xFF7C, 0x30B7 ), // HALFWIDTH KATAKANA LETTER SI --> KATAKANA LETTER SI
- MAKE_PAIR( 0xFF7D, 0x30B9 ), // HALFWIDTH KATAKANA LETTER SU --> KATAKANA LETTER SU
- MAKE_PAIR( 0xFF7E, 0x30BB ), // HALFWIDTH KATAKANA LETTER SE --> KATAKANA LETTER SE
- MAKE_PAIR( 0xFF7F, 0x30BD ), // HALFWIDTH KATAKANA LETTER SO --> KATAKANA LETTER SO
- MAKE_PAIR( 0xFF80, 0x30BF ), // HALFWIDTH KATAKANA LETTER TA --> KATAKANA LETTER TA
- MAKE_PAIR( 0xFF81, 0x30C1 ), // HALFWIDTH KATAKANA LETTER TI --> KATAKANA LETTER TI
- MAKE_PAIR( 0xFF82, 0x30C4 ), // HALFWIDTH KATAKANA LETTER TU --> KATAKANA LETTER TU
- MAKE_PAIR( 0xFF83, 0x30C6 ), // HALFWIDTH KATAKANA LETTER TE --> KATAKANA LETTER TE
- MAKE_PAIR( 0xFF84, 0x30C8 ), // HALFWIDTH KATAKANA LETTER TO --> KATAKANA LETTER TO
- MAKE_PAIR( 0xFF85, 0x30CA ), // HALFWIDTH KATAKANA LETTER NA --> KATAKANA LETTER NA
- MAKE_PAIR( 0xFF86, 0x30CB ), // HALFWIDTH KATAKANA LETTER NI --> KATAKANA LETTER NI
- MAKE_PAIR( 0xFF87, 0x30CC ), // HALFWIDTH KATAKANA LETTER NU --> KATAKANA LETTER NU
- MAKE_PAIR( 0xFF88, 0x30CD ), // HALFWIDTH KATAKANA LETTER NE --> KATAKANA LETTER NE
- MAKE_PAIR( 0xFF89, 0x30CE ), // HALFWIDTH KATAKANA LETTER NO --> KATAKANA LETTER NO
- MAKE_PAIR( 0xFF8A, 0x30CF ), // HALFWIDTH KATAKANA LETTER HA --> KATAKANA LETTER HA
- MAKE_PAIR( 0xFF8B, 0x30D2 ), // HALFWIDTH KATAKANA LETTER HI --> KATAKANA LETTER HI
- MAKE_PAIR( 0xFF8C, 0x30D5 ), // HALFWIDTH KATAKANA LETTER HU --> KATAKANA LETTER HU
- MAKE_PAIR( 0xFF8D, 0x30D8 ), // HALFWIDTH KATAKANA LETTER HE --> KATAKANA LETTER HE
- MAKE_PAIR( 0xFF8E, 0x30DB ), // HALFWIDTH KATAKANA LETTER HO --> KATAKANA LETTER HO
- MAKE_PAIR( 0xFF8F, 0x30DE ), // HALFWIDTH KATAKANA LETTER MA --> KATAKANA LETTER MA
- MAKE_PAIR( 0xFF90, 0x30DF ), // HALFWIDTH KATAKANA LETTER MI --> KATAKANA LETTER MI
- MAKE_PAIR( 0xFF91, 0x30E0 ), // HALFWIDTH KATAKANA LETTER MU --> KATAKANA LETTER MU
- MAKE_PAIR( 0xFF92, 0x30E1 ), // HALFWIDTH KATAKANA LETTER ME --> KATAKANA LETTER ME
- MAKE_PAIR( 0xFF93, 0x30E2 ), // HALFWIDTH KATAKANA LETTER MO --> KATAKANA LETTER MO
- MAKE_PAIR( 0xFF94, 0x30E4 ), // HALFWIDTH KATAKANA LETTER YA --> KATAKANA LETTER YA
- MAKE_PAIR( 0xFF95, 0x30E6 ), // HALFWIDTH KATAKANA LETTER YU --> KATAKANA LETTER YU
- MAKE_PAIR( 0xFF96, 0x30E8 ), // HALFWIDTH KATAKANA LETTER YO --> KATAKANA LETTER YO
- MAKE_PAIR( 0xFF97, 0x30E9 ), // HALFWIDTH KATAKANA LETTER RA --> KATAKANA LETTER RA
- MAKE_PAIR( 0xFF98, 0x30EA ), // HALFWIDTH KATAKANA LETTER RI --> KATAKANA LETTER RI
- MAKE_PAIR( 0xFF99, 0x30EB ), // HALFWIDTH KATAKANA LETTER RU --> KATAKANA LETTER RU
- MAKE_PAIR( 0xFF9A, 0x30EC ), // HALFWIDTH KATAKANA LETTER RE --> KATAKANA LETTER RE
- MAKE_PAIR( 0xFF9B, 0x30ED ), // HALFWIDTH KATAKANA LETTER RO --> KATAKANA LETTER RO
- MAKE_PAIR( 0xFF9C, 0x30EF ), // HALFWIDTH KATAKANA LETTER WA --> KATAKANA LETTER WA
- MAKE_PAIR( 0xFF9D, 0x30F3 ), // HALFWIDTH KATAKANA LETTER N --> KATAKANA LETTER N
- MAKE_PAIR( 0xFF9E, 0x3099 ), // HALFWIDTH KATAKANA VOICED SOUND MARK --> COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
- MAKE_PAIR( 0xFF9F, 0x309A ) // HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK --> COMBINING KATAKANA-
-};
-
-
-static struct hw_pair aCombine3099[] =
-{
- { 0x30a6, 0x30f4 },
- { 0x30ab, 0x30ac },
- { 0x30ad, 0x30ae },
- { 0x30af, 0x30b0 },
- { 0x30b1, 0x30b2 },
- { 0x30b3, 0x30b4 },
- { 0x30b5, 0x30b6 },
- { 0x30b7, 0x30b8 },
- { 0x30b9, 0x30ba },
- { 0x30bb, 0x30bc },
- { 0x30bd, 0x30be },
- { 0x30bf, 0x30c0 },
- { 0x30c1, 0x30c2 },
- { 0x30c4, 0x30c5 },
- { 0x30c6, 0x30c7 },
- { 0x30c8, 0x30c9 },
- { 0x30cf, 0x30d0 },
- { 0x30d2, 0x30d3 },
- { 0x30d5, 0x30d6 },
- { 0x30d8, 0x30d9 },
- { 0x30db, 0x30dc },
- { 0x30ef, 0x30f7 },
- { 0x30f0, 0x30f8 },
- { 0x30f1, 0x30f9 },
- { 0x30f2, 0x30fa },
- { 0x30fd, 0x30fe }
-};
-
-static struct hw_pair aCombine309A[] =
-{
- { 0x30cf, 0x30d1 },
- { 0x30d2, 0x30d4 },
- { 0x30d5, 0x30d7 },
- { 0x30d8, 0x30da },
- { 0x30db, 0x30dd }
-};
-
-USHORT ImplReplaceFullWidth( sal_Unicode* pString, USHORT nLen )
-{
- sal_Unicode* pRead = pString;
- sal_Unicode* pWrite = pRead;
- USHORT nNewLen = nLen;
-
- while( (pRead - pString) < nLen )
- {
- if( pWrite != pRead )
- *pWrite = *pRead;
-
- if( *pRead >= 0xff65 && *pRead <= 0xff9f )
- {
- *pWrite = aHWPairs[ *pRead - 0xff65 ].nTo;
-
- struct hw_pair* pTable = NULL;
- int nTableEntries = 0;
- if( *pWrite == 0x3099 )
- {
- // replace 0x3099 combinations
- pTable = aCombine3099;
- nTableEntries = sizeof(aCombine3099)/sizeof(aCombine3099[0]);
- }
- else if( *pWrite == 0x309a )
- {
- // replace 0x309a combinations
- pTable = aCombine309A;
- nTableEntries = sizeof(aCombine309A)/sizeof(aCombine309A[0]);
- }
- if( pTable )
- {
- sal_Unicode c = pWrite[-1];
- for( int i = 0; i < nTableEntries; i++ )
- if( c == pTable[i].nFrom )
- {
- pWrite--;
- *pWrite = pTable[i].nTo;
- nNewLen--;
- break;
- }
- }
- }
- pRead++;
- pWrite++;
- }
- if( pWrite < pRead )
- *pWrite = 0;
-
- return nNewLen;
-}
-
-void ConvertHalfwitdhToFullwidth( String& rString )
-{
- USHORT nNewLen = ImplReplaceFullWidth( rString.GetBufferAccess(), rString.Len() );
- rString.ReleaseBufferAccess( nNewLen );
-}
diff --git a/transex3/source/inireader.cxx b/transex3/source/inireader.cxx
new file mode 100644
index 000000000000..0985e788452d
--- /dev/null
+++ b/transex3/source/inireader.cxx
@@ -0,0 +1,132 @@
+#include <unicode/regex.h>
+#include <unicode/unistr.h>
+#include <string>
+#include <fstream>
+#include <iostream>
+#include "inireader.hxx"
+
+using namespace std;
+namespace transex3
+{
+
+bool INIreader::read( INImap& myMap , string& filename )
+{
+ ifstream aFStream( filename.c_str() );
+ if( aFStream && aFStream.is_open())
+ {
+ string line;
+ string section;
+ string param_key;
+ string param_value;
+ stringmap* myvalues = 0;
+
+ while( std::getline( aFStream , line ) )
+ {
+ trim( line );
+ if( line.empty() ){
+ }
+ else if( is_section( line , section ) )
+ {
+ //cerr << "[" << section << "]\n";
+ myvalues = new stringmap();
+ myMap[ section ] = myvalues ;
+ }
+ else if ( is_parameter( line , param_key , param_value ) )
+ {
+ //cerr << "" << param_key << " = " << param_value << "\n";
+ if( myvalues )
+ {
+ (*myvalues)[ param_key ] = param_value ;
+ }
+ else
+ {
+ cerr << "ERROR: The INI file " << filename << " appears to be broken ... parameters without a section?!?\n";
+ if( aFStream.is_open() ) aFStream.close();
+ return false;
+ }
+ }
+ }
+
+ if( aFStream.is_open() )
+ aFStream.close();
+
+ return true;
+ }
+ else
+ {
+ cerr << "ERROR: Can't open file '" << filename << "'\n";
+ }
+ return false;
+}
+
+bool INIreader::is_section( string& line , string& section_str )
+{
+ // Error in regex ?
+ check_status( section_status );
+ UnicodeString target( line.c_str() , line.length() );
+
+ section_match->reset( target );
+ check_status( section_status );
+
+ if( section_match->find() )
+ {
+ check_status( section_status );
+ UnicodeString result( section_match->group( 1 , section_status) );
+ check_status( section_status );
+ toStlString( result , section_str );
+
+ return true;
+ }
+ return false;
+}
+
+bool INIreader::is_parameter( string& line , string& parameter_key , string& parameter_value )
+{
+ // Error in regex ?
+ check_status( parameter_status );
+ UnicodeString target( line.c_str() , line.length() );
+
+ parameter_match->reset( target );
+ check_status( parameter_status );
+
+ if( parameter_match->find() )
+ {
+ check_status( parameter_status );
+
+ UnicodeString result1( parameter_match->group( 1 , parameter_status) );
+ check_status( parameter_status );
+ toStlString( result1 , parameter_key );
+ UnicodeString result2( parameter_match->group( 2 , parameter_status) );
+ check_status( parameter_status );
+ toStlString( result2 , parameter_value );
+
+ return true;
+ }
+ return false;
+}
+
+void INIreader::check_status( UErrorCode status )
+{
+ if( U_FAILURE( status) )
+ {
+ cerr << "Error in or while using regex: " << u_errorName( status ) << "\n";
+ exit(-1);
+ }
+}
+
+void INIreader::toStlString( const UnicodeString& str , string& stl_str)
+{
+ // convert to string
+ char* buffer = new char[ str.length()*3 ];
+ str.extract( 0 , str.length() , buffer );
+ stl_str = string( buffer );
+ delete buffer;
+}
+
+void INIreader::trim( string& str )
+{
+ string str1 = str.substr( 0 , str.find_last_not_of(' ') + 1 );
+ str = str1.empty() ? str1 : str1.substr( str1.find_first_not_of(' ') );
+}
+
+}
diff --git a/transex3/source/localize.cxx b/transex3/source/localize.cxx
index 31143ab50d38..c82d152cac7e 100644
--- a/transex3/source/localize.cxx
+++ b/transex3/source/localize.cxx
@@ -33,7 +33,11 @@
#include "srciter.hxx"
#include "export.hxx"
+#include "treeconfig.hxx"
+#include <string>
+#include <vector>
#include <stdio.h>
+#include <iostream>
#include "tools/errcode.hxx"
#include "tools/fsys.hxx"
@@ -42,6 +46,8 @@
#include <transex3/file.hxx>
#endif
+namespace transex3
+{
//
// SourceTreeLocalizer
@@ -131,7 +137,6 @@ private:
ByteString sLanguageRestriction;
- ByteString sIsoCode99;
ByteString sOutputFile;
bool bQuiet2;
@@ -147,8 +152,7 @@ private:
void WorkOnFile(
const ByteString &rFileName,
const ByteString &rExecutable,
- const ByteString &rParameter,
- const ByteString &rIso
+ const ByteString &rParameter
);
void WorkOnFileType(
@@ -156,8 +160,7 @@ private:
const ByteString &rExtension,
const ByteString &rExecutable,
const ByteString &rParameter,
- const ByteString &rCollectMode,
- const ByteString &rIso
+ const ByteString &rCollectMode
);
void WorkOnDirectory( const ByteString &rDirectory );
BOOL ExecuteMerge();
@@ -175,8 +178,6 @@ public:
void SetLanguageRestriction( const ByteString& rRestrictions )
{ sLanguageRestriction = rRestrictions; }
- void SetIsoCode99( const ByteString& rIsoCode )
- { sIsoCode99 = rIsoCode; }
int getFileCnt();
BOOL Extract( const ByteString &rDestinationFile );
BOOL Merge( const ByteString &rSourceFile , const ByteString &rOutput );
@@ -215,16 +216,6 @@ const ByteString SourceTreeLocalizer::GetProjectName( BOOL bAbs )
DirEntry aTest = aCur + DirEntry(PRJ_DIR_NAME) + DirEntry(DLIST_NAME);
if ( aTest.Exists() )
{
- // HACK !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- if (( ByteString( aCur.GetName(), RTL_TEXTENCODING_ASCII_US ).Equals("webinstall") ) ||
- ( ByteString( aCur.GetName(), RTL_TEXTENCODING_ASCII_US ).Equals("portal") ) ||
- ( ByteString( aCur.GetName(), RTL_TEXTENCODING_ASCII_US ).Equals("xulclient") ) ||
- ( ByteString( aCur.GetName(), RTL_TEXTENCODING_ASCII_US ).Search( "wdk_" ) == 0 ))
- return "";
- // end HACK !!!!!!!!!!!!!!!!!!!!!!!!!
-
-
-
if ( bAbs )
return ByteString( aCur.GetFull(), RTL_TEXTENCODING_ASCII_US );
else
@@ -280,10 +271,9 @@ bool skipProject( ByteString sPrj )
/*****************************************************************************/
void SourceTreeLocalizer::WorkOnFile(
const ByteString &rFileName, const ByteString &rExecutable,
- const ByteString &rParameter, const ByteString &rIso )
+ const ByteString &rParameter )
/*****************************************************************************/
{
- (void) rIso; // Remove me ;)
String sFull( rFileName, RTL_TEXTENCODING_ASCII_US );
DirEntry aEntry( sFull );
ByteString sFileName( aEntry.GetName(), RTL_TEXTENCODING_ASCII_US );
@@ -294,14 +284,10 @@ void SourceTreeLocalizer::WorkOnFile(
aPath.SetCWD();
ByteString sPrj( GetProjectName());
- //printf ("prj = %s , exe = %s\n", sPrj.GetBuffer() , rExecutable.GetBuffer() );
-// printf("Skip %s = %d \n",sPrj.GetBuffer() , skipProject( sPrj ) );
- //printf("prj = %s\n",sPrj.GetBuffer());
if ( sPrj.Len() && !skipProject( sPrj ) )
{
ByteString sRoot( GetProjectRootRel());
- // get temp file
DirEntry aTemp( Export::GetTempFile());
ByteString sTempFile( aTemp.GetFull(), RTL_TEXTENCODING_ASCII_US );
@@ -442,7 +428,7 @@ BOOL SourceTreeLocalizer::CheckPositiveList( const ByteString &rFileName )
void SourceTreeLocalizer::WorkOnFileType(
const ByteString &rDirectory, const ByteString &rExtension,
const ByteString &rExecutable, const ByteString &rParameter,
- const ByteString &rCollectMode, const ByteString &rIso
+ const ByteString &rCollectMode
)
/*****************************************************************************/
{
@@ -466,7 +452,7 @@ void SourceTreeLocalizer::WorkOnFileType(
bAllowed = CheckPositiveList( sFile );
if ( bAllowed )
- WorkOnFile( sFile, rExecutable, rParameter, rIso );
+ WorkOnFile( sFile, rExecutable, rParameter );
}
}
@@ -480,7 +466,6 @@ void SourceTreeLocalizer::WorkOnDirectory( const ByteString &rDirectory )
ByteString sExecutable( ExeTable[ nIndex ][ 1 ] );
ByteString sParameter( ExeTable[ nIndex ][ 2 ] );
ByteString sCollectMode( ExeTable[ nIndex ][ 3 ] );
- ByteString sIso( ExeTable[ nIndex ][ 4 ] );
while( !sExtension.Equals( "NULL" )) {
WorkOnFileType(
@@ -488,8 +473,7 @@ void SourceTreeLocalizer::WorkOnDirectory( const ByteString &rDirectory )
sExtension,
sExecutable,
sParameter,
- sCollectMode,
- sIso
+ sCollectMode
);
nIndex++;
@@ -498,7 +482,6 @@ void SourceTreeLocalizer::WorkOnDirectory( const ByteString &rDirectory )
sExecutable = ExeTable[ nIndex ][ 1 ];
sParameter = ExeTable[ nIndex ][ 2 ];
sCollectMode = ExeTable[ nIndex ][ 3 ];
- sIso = ExeTable[ nIndex ][ 4 ];
}
}
@@ -517,12 +500,13 @@ BOOL SourceTreeLocalizer::Extract( const ByteString &rDestinationFile )
/*****************************************************************************/
{
nMode = LOCALIZE_EXTRACT;
- aSDF.Open( String( rDestinationFile, RTL_TEXTENCODING_ASCII_US ),
- STREAM_STD_WRITE | STREAM_TRUNC );
+
+ aSDF.Open( String( rDestinationFile , RTL_TEXTENCODING_ASCII_US ) , STREAM_STD_WRITE );
aSDF.SetLineDelimiter( LINEEND_CRLF );
BOOL bReturn = aSDF.IsOpen();
if ( bReturn ) {
+ aSDF.Seek( STREAM_SEEK_TO_END );
bReturn = StartExecute();
aSDF.Close();
}
@@ -530,6 +514,7 @@ BOOL SourceTreeLocalizer::Extract( const ByteString &rDestinationFile )
printf("ERROR: Can't create file %s\n", rDestinationFile.GetBuffer() );
}
nMode = LOCALIZE_NONE;
+ aSDF.Close();
return bReturn;
}
@@ -569,8 +554,6 @@ BOOL SourceTreeLocalizer::MergeSingleFile(
while( !sCandidate.Equals ("NULL") && !sCandidate.Equals(sExtension) )
sCandidate = ExeTable[ ++nIndex ][ 0 ];
- ByteString sIso( ExeTable[ nIndex ][ 4 ] );
-
if ( !sCandidate.Equals( "NULL" ) ) {
if( !aEntry.Exists()) {
DirEntryKind theDir=FSYS_KIND_FILE;
@@ -606,10 +589,6 @@ BOOL SourceTreeLocalizer::MergeSingleFile(
sCommand += sOutput;
sCommand += " ";
sCommand += ByteString( ExeTable[ nIndex ][ 2 ] );
- if ( sIso.Equals( "iso" ) && sIsoCode99.Len()) {
- sCommand += " -ISO99 ";
- sCommand += sIsoCode99;
- }
if ( sLanguageRestriction.Len()) {
sCommand += " -l ";
sCommand += sLanguageRestriction;
@@ -707,7 +686,6 @@ BOOL SourceTreeLocalizer::ExecuteMerge( )
ByteString sBDel( sDel.GetBuffer() , sDel.Len() , RTL_TEXTENCODING_UTF8 );
if( bLocal ){
xub_StrLen nPos = sOutputFileName.SearchBackward( sBDel.GetChar(0) );
- //if( nPos >= 0 )
sOutputFileName = sOutputFileName.Copy( nPos+1 , sOutputFileName.Len()-nPos-1 );
}
ByteStringBoolHashMap aFileHM;
@@ -720,7 +698,6 @@ BOOL SourceTreeLocalizer::ExecuteMerge( )
aFileHM[sFileName]=true;
}
- // RECODE THIS !!!!!!!!!!!!!!!!!!!!!
for( ByteStringBoolHashMap::iterator iter = aFileHM.begin(); iter != aFileHM.end(); ++iter ){
sFileKey = iter->first;
aSDF.Seek( 0 );
@@ -757,7 +734,6 @@ BOOL SourceTreeLocalizer::ExecuteMerge( )
bMerged = true;
if ( !MergeSingleFile( sPrj, sFile, sSDFFile ))
bReturn = FALSE;
- //}
}else{
bMerged = true;
//printf("MergeSingleFile('%s','%s','%s')\n",sPrj.GetBuffer(),sFile.GetBuffer(),sSDFFile.GetBuffer());
@@ -766,7 +742,6 @@ BOOL SourceTreeLocalizer::ExecuteMerge( )
}
}
}
- //}
aEntry.Kill();
// If Outputfile not included in the SDF file copy it without merge
@@ -793,13 +768,15 @@ BOOL SourceTreeLocalizer::Merge( const ByteString &rSourceFile , const ByteStrin
BOOL bReturn = aSDF.IsOpen();
if ( bReturn ) {
bReturn = ExecuteMerge();
- aSDF.Close();
+// aSDF.Close();
}
-
+ aSDF.Close();
nMode = LOCALIZE_NONE;
return bReturn;
}
+}
+using namespace transex3;
#define STATE_NONE 0x0000
#define STATE_EXPORT 0x0001
@@ -819,13 +796,11 @@ void Help()
fprintf( stdout,
"As part of the L10N framework, localize extracts and merges translations\n"
"out of and into the whole source tree.\n\n"
- "Syntax: localize -e|-m -l l1[=f1][,l2[=f2]][...] -f FileName [-QQ][-skip_links]\n"
+ "Syntax: localize -e -l en-US -f FileName [-QQ]\n"
"Parameter:\n"
"\t-e: Extract mode\n"
- "\t-m: Merge mode\n"
"\tFileName: Output file when extract mode, input file when merge mode\n"
"\tl1...ln: supported languages (\"all\" for all languages).\n"
- "\tf1...fn: fallback languages for supported languages\n"
"\tQQ: quiet output)"
);
@@ -834,16 +809,9 @@ void Help()
fprintf( stdout,
"\nExample 1:\n"
"==========\n"
- "localize -e -l en-US,de -f MyFile\n\n"
+ "localize -e -l en-US -f MyFile\n\n"
"All strings will be extracted for language de and language en-US.\n"
);
- fprintf( stdout,
- "\nExample 2:\n"
- "==========\n"
- "localize -m -l es -f MyFile\n\n"
- "All strings in MyFile will be merged into language es in the\n"
- "source code.\n"
- );
}
/*****************************************************************************/
@@ -880,11 +848,13 @@ int _cdecl main( int argc, char *argv[] )
bool bQuiet2 = false;
bool bSkipLinks = false;
- ByteString sIsoCode;
ByteString sLanguages;
ByteString sFileName;
ByteString sOutput;
+ bQuiet2 = true;
+ bExport = TRUE;
+
for( int i = 1; i < argc; i++ ) {
ByteString sSwitch( argv[ i ] );
sSwitch.ToUpperAscii();
@@ -895,12 +865,6 @@ int _cdecl main( int argc, char *argv[] )
return Error();
bExport = TRUE;
}
- else if ( sSwitch.Equals( "-M" )) {
- nState = STATE_MERGE;
- if ( bExport )
- return Error();
- bMerge = TRUE;
- }
else if( sSwitch.Equals( "-Q" )) {
bQuiet = true;
}
@@ -912,20 +876,12 @@ int _cdecl main( int argc, char *argv[] )
nState = STATE_FILENAME;
else if ( sSwitch.Equals( "-QQ" ))
bQuiet2 = true;
- // else if ( ByteString( argv[ i ]).ToUpperAscii().Equals( "-SKIP_LINKS" ))
- // bSkipLinks = true;
else if ( ByteString( argv[ i ]).ToUpperAscii().Equals( "-O" ) )
nState = STATE_OUTPUT;
else {
switch ( nState ) {
case STATE_NONE:
return Error();
- case STATE_ISOCODE:
- if ( sIsoCode.Len())
- return Error();
- sIsoCode = ByteString( argv[ i ] );
- nState = STATE_NONE;
- break;
case STATE_OUTPUT:
if ( sOutput.Len())
return Error();
@@ -954,12 +910,10 @@ int _cdecl main( int argc, char *argv[] )
return 1;
}
- ByteString sRoot( Export::GetEnv( "SRC_ROOT" ));
- DirEntry aRoot( String( sRoot, RTL_TEXTENCODING_ASCII_US ));
- sRoot = ByteString( aRoot.GetFull(), RTL_TEXTENCODING_ASCII_US );
+ ByteString sSolarVer( Export::GetEnv( "WORK_STAMP" ));
ByteString sVersion( Export::GetEnv( "WORK_STAMP" ));
- if ( !sRoot.Len() || !sVersion.Len()) {
+ if ( !sSolarVer.Len() || !sVersion.Len()) {
fprintf( stderr, "ERROR: No environment set!\n" );
return 1;
}
@@ -972,55 +926,46 @@ int _cdecl main( int argc, char *argv[] )
return 3;
}
- ByteString sMode( "merge" );
- if ( bExport )
- sMode = "extract";
-
- ByteString sICode( sIsoCode );
- if ( !sICode.Len())
- sICode = "not given, support for language 99 disabled";
- if(!bQuiet && !bQuiet2 ){
- fprintf( stdout,
- "\n"
- "============================================================\n"
- "Current settings:\n"
- "============================================================\n"
- "Mode: %s\n"
- "Workspace: %s\n"
- "Source tree: %s\n"
- "Languages: %s\n"
- "ISO code (99): %s\n"
- "Filename: %s\n"
- "Outputfile %s\n"
- "============================================================\n"
- "\n"
- ,
- sMode.GetBuffer(),
- sVersion.GetBuffer(),
- sRoot.GetBuffer(),
- sLanguages.GetBuffer(),
- sICode.GetBuffer(),
- sFileName.GetBuffer(),
- sOutput.GetBuffer()
- );
- }
- SourceTreeLocalizer aIter( sRoot, sVersion , (sOutput.Len() > 0) , bQuiet2 , bSkipLinks );
-
- aIter.SetLanguageRestriction( sLanguages );
- aIter.SetIsoCode99( sIsoCode );
- if ( bExport ){
- if( bQuiet2 ){ /*printf("");*/fflush( stdout );}
- aIter.Extract( sFileName );
- if( bQuiet2 ){ printf("\n %d files found!\n",aIter.GetFileCnt());}
+ DirEntry aEntry( String( sFileName , RTL_TEXTENCODING_ASCII_US ));
+ aEntry.ToAbs();
+ String sFullEntry = aEntry.GetFull();
+ ByteString sFileABS( aEntry.GetFull(), gsl_getSystemTextEncoding());
+ //printf("B %s\nA %s\n",rDestinationFile.GetBuffer(), sFile.GetBuffer());
+ sFileName = sFileABS;
+
+ Treeconfig treeconfig;
+ vector<string> repos;
+ bool hasPwd = treeconfig.getActiveRepositories( repos );
+ if( hasPwd ) cout << "Found special path!\n";
+
+ // localize through all repositories
+ for( vector<string>::iterator iter = repos.begin(); iter != repos.end() ; ++iter )
+ {
+ string curRepository = string( Export::GetEnv("SOURCE_ROOT_DIR") ) + "/" + *iter;
+ cout << "Localizing repository " << curRepository << "\n";
+ SourceTreeLocalizer aIter( ByteString( curRepository.c_str() ) , sVersion , (sOutput.Len() > 0) , bQuiet2 , bSkipLinks );
+ aIter.SetLanguageRestriction( sLanguages );
+ if ( bExport ){
+ if( bQuiet2 ){ /*printf("");*/fflush( stdout );}
+ aIter.Extract( sFileName );
+ if( bQuiet2 ){ printf("\n %d files found!\n",aIter.GetFileCnt());}
+ }
}
- else {
+ if( hasPwd )
+ {
+ string pwd;
+ Export::getCurrentDir( pwd );
+ cout << "Localizing repository " << pwd << "\n";
+ SourceTreeLocalizer aIter( ByteString( pwd.c_str() ) , sVersion , (sOutput.Len() > 0) , bQuiet2 , bSkipLinks );
+ aIter.SetLanguageRestriction( sLanguages );
+ if ( bExport ){
+ if( bQuiet2 ){ /*printf("");*/fflush( stdout );}
+ aIter.Extract( sFileName );
+ if( bQuiet2 ){ printf("\n %d files found!\n",aIter.GetFileCnt());}
+ }
- DirEntry aEntry( String( sFileName, RTL_TEXTENCODING_ASCII_US ));
- if ( !aEntry.Exists())
- return FALSE;
- printf("%s\n",sFileName.GetBuffer());
- aIter.Merge( sFileName , sOutput );
}
return 0;
}
+
diff --git a/transex3/source/makefile.mk b/transex3/source/makefile.mk
index 68b94a5b58fa..a557b210aad0 100644
--- a/transex3/source/makefile.mk
+++ b/transex3/source/makefile.mk
@@ -61,8 +61,8 @@ OBJFILES= \
$(OBJ)$/helpmerge.obj \
$(OBJ)$/helpex.obj \
$(OBJ)$/file.obj \
- $(OBJ)$/directory.obj \
- $(OBJ)$/hw2fw.obj
+ $(OBJ)$/directory.obj
+
LIB1TARGET= $(LB)$/$(TARGET).lib
LIB1ARCHIV= $(LB)$/libtransex.a
@@ -73,8 +73,8 @@ LIB1OBJFILES= $(OBJ)$/export.obj \
$(OBJ)$/srciter.obj \
$(OBJ)$/file.obj \
$(OBJ)$/directory.obj \
- $(OBJ)$/utf8conv.obj \
- $(OBJ)$/hw2fw.obj
+ $(OBJ)$/utf8conv.obj
+
APP1VERSIONMAP=exports.map
@@ -96,7 +96,7 @@ APP1LIBS+= $(LB)$/$(TARGET).lib
APP1DEPN= $(OBJ)$/src_yy_wrapper.obj $(LB)$/$(TARGET).lib
APP2TARGET= helpex
-APP2OBJS= $(OBJ)$/helpmerge.obj $(OBJ)$/xmlparse.obj $(OBJ)$/export2.obj $(OBJ)$/utf8conv.obj $(OBJ)$/merge.obj $(OBJ)$/helpex.obj $(OBJ)$/hw2fw.obj
+APP2OBJS= $(OBJ)$/helpmerge.obj $(OBJ)$/xmlparse.obj $(OBJ)$/export2.obj $(OBJ)$/utf8conv.obj $(OBJ)$/merge.obj $(OBJ)$/helpex.obj
APP2RPATH= NONE
.IF "$(OS)"!="MACOSX"
@@ -110,7 +110,7 @@ APP2STDLIBS+=$(SALLIB) $(EXPATASCII3RDLIB) $(TOOLSLIB) $(VOSLIB)
# extractor and merger for *.lng and *.lng
APP3TARGET= ulfex
-APP3OBJS= $(OBJ)$/lngmerge.obj $(OBJ)$/hw2fw.obj $(OBJ)$/merge.obj $(OBJ)$/export2.obj $(OBJ)$/lngex.obj $(OBJ)$/utf8conv.obj
+APP3OBJS= $(OBJ)$/lngmerge.obj $(OBJ)$/merge.obj $(OBJ)$/export2.obj $(OBJ)$/lngex.obj $(OBJ)$/utf8conv.obj
APP3RPATH= NONE
.IF "$(OS)"!="MACOSX"
@@ -142,7 +142,7 @@ APP5STDLIBS+= \
# extractor and merger for *.cfg
APP6TARGET= cfgex
-APP6OBJS= $(OBJ)$/cfgmerge.obj $(OBJ)$/cfg_yy_wrapper.obj $(OBJ)$/hw2fw.obj $(OBJ)$/merge.obj $(OBJ)$/export2.obj $(OBJ)$/utf8conv.obj
+APP6OBJS= $(OBJ)$/cfgmerge.obj $(OBJ)$/cfg_yy_wrapper.obj $(OBJ)$/merge.obj $(OBJ)$/export2.obj $(OBJ)$/utf8conv.obj
.IF "$(OS)"!="MACOSX"
#APP6STDLIBS+= $(BTSTRPLIB)
@@ -159,7 +159,7 @@ APP6STDLIBS+= \
# extractor and merger for *.xrm
APP7TARGET= xrmex
-APP7OBJS= $(OBJ)$/xrmmerge.obj $(OBJ)$/xrm_yy_wrapper.obj $(OBJ)$/hw2fw.obj $(OBJ)$/merge.obj $(OBJ)$/export2.obj $(OBJ)$/utf8conv.obj
+APP7OBJS= $(OBJ)$/xrmmerge.obj $(OBJ)$/xrm_yy_wrapper.obj $(OBJ)$/merge.obj $(OBJ)$/export2.obj $(OBJ)$/utf8conv.obj
APP7RPATH= NONE
.IF "$(OS)"!="MACOSX"
@@ -174,21 +174,23 @@ APP7STDLIBS+= \
# static libs at end for OS X
.ENDIF
-# encoding converter for text files
-APP8TARGET= txtconv
-#APP8STACK= 16000
-APP8OBJS= $(OBJ)$/utf8conv.obj $(OBJ)$/txtconv.obj $(OBJ)$/hw2fw.obj
-APP8STDLIBS=$(TOOLSLIB) $(SALLIB)
+#
+#APP8TARGET= treeconfig
+#APP8OBJS= $(OBJ)$/treeconfig.obj $(OBJ)$/inireader.obj $(OBJ)$/export2.obj
+#APP8STDLIBS=$(TOOLSLIB) $(SALLIB) $(VOSLIB) $(ICUINLIB) $(STLPORT)
# localizer for l10n framework
APP9TARGET= localize_sl
EXCEPTIONSFILES= \
$(OBJ)$/localize.obj
-APP9OBJS= $(OBJ)$/localize.obj $(OBJ)$/utf8conv.obj $(OBJ)$/srciter.obj $(OBJ)$/export2.obj $(OBJ)$/file.obj $(OBJ)$/directory.obj
+APP9OBJS= $(OBJ)$/localize.obj $(OBJ)$/utf8conv.obj $(OBJ)$/srciter.obj $(OBJ)$/export2.obj $(OBJ)$/file.obj $(OBJ)$/directory.obj $(OBJ)$/treeconfig.obj $(OBJ)$/inireader.obj
APP9STDLIBS+= \
$(TOOLSLIB) \
$(VOSLIB) \
+ $(ICUINLIB) \
+ $(ICUUCLIB) \
+ $(STLPORTLIB) \
$(SALLIB)
DEPOBJFILES=$(APP1OBJS) $(APP2OBJS) $(APP3OBJS) $(APP4OBJS) $(APP5OBJS) $(APP6OBJS) $(APP7OBJS) $(APP8OBJS) $(APP9OBJS)
diff --git a/transex3/source/treeconfig.cxx b/transex3/source/treeconfig.cxx
new file mode 100644
index 000000000000..137492c39a50
--- /dev/null
+++ b/transex3/source/treeconfig.cxx
@@ -0,0 +1,128 @@
+#include <vector>
+#include <string>
+#include <iostream>
+#include "treeconfig.hxx"
+#include "export.hxx"
+#ifdef WNT
+#include <direct.h>
+#include <io.h>
+#else
+#include <dirent.h>
+#endif
+#include <sys/stat.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+using namespace std;
+
+namespace transex3
+{
+
+bool Treeconfig::parseConfig(){
+
+ string source_config_file = string( static_cast<ByteString>( Export::GetEnv("SOURCE_ROOT_DIR") ).GetBuffer() );
+ if( source_config_file.empty() )
+ {
+ cerr << "Error: no suitable environment set?!?";
+ exit( -1 );
+ }
+ source_config_file += string("/source_config");
+ if( isConfigFilePresent() )
+ {
+ inireader.read( map , source_config_file );
+ return true;
+ }
+ else return false;
+}
+
+// ALWAYS add all repositories from source_config file to the container active_repos
+// if a config_file is present ALWAYS return false
+// if you are in the root of a repository also add it to the container active_repos
+// if you are far inside a repository /my/path/ooo/sw/source then don't add it to the container but return true
+// if you are in some misc place like /tmp then return true
+// => the application can decide what to do in case the function returns true thus how to handle pwd() path
+bool Treeconfig::getActiveRepositories( vector<string>& active_repos ){
+
+ bool isPresent = isConfigFilePresent();
+ bool hasPath = false;
+ string pwd;
+ string guessedRepo;
+ Export::getCurrentDir( pwd );
+ string source_root = Export::GetEnv( "SOURCE_ROOT_DIR" );
+ string solarsrc = Export::GetEnv( "SOLARSRC" );
+ string partial;
+
+ // if we are inside of a repository root then active it otherwise let the app handle the return!
+ string::size_type pos = pwd.find_first_of( source_root );
+ if( pos != string::npos && ( pos + source_root.length() +1 ) < pwd.length()){ // I am within SOURCE_ROOT_DIR
+ partial = pwd.substr( pos + source_root.length() +1 , pwd.length());
+ string::size_type nextPart = partial.find_first_of( "/" );
+ if( nextPart != string::npos )
+ hasPath = true;
+ else
+ guessedRepo = partial;
+ }
+ else // I am NOT within SOURCE_ROOT_DIR
+ hasPath = true;
+
+ if( isPresent )
+ {
+ hasPath = false; // if config_file is present don't care about pwd
+ stringmap* repos = static_cast<stringmap*>( map[ string("repositories") ] );
+ if( repos != 0 )
+ {
+ for( stringmap::iterator iter = repos->begin() ; iter != repos->end() ; ++iter )
+ {
+ if( static_cast<string>( iter->second ) == string( "active" ) )
+ {
+ active_repos.push_back( iter->first );
+ if( static_cast<string>( iter->first ) == guessedRepo )
+ {
+ guessedRepo.clear(); // don't add double in case it is present in config_file
+ }
+ }
+ }
+ }
+ else
+ {
+ cerr << "Error: source_config files doesn't contain a 'repositories' section ?!?";
+ exit( -1 );
+ }
+ }
+ if( !guessedRepo.empty() ){
+ active_repos.push_back( guessedRepo ); // add myrepo
+ }
+ return hasPath; // are we deep inside of a source tree or outside of SOURCE_ROOT_DIR?
+}
+
+void Treeconfig::getCurrentDir( string& dir )
+{
+ char buffer[64000];
+ if( getcwd( buffer , sizeof( buffer ) ) == 0 ){
+ cerr << "Error: getcwd failed!\n";
+ exit( -1 );
+ }
+ dir = string( buffer );
+}
+
+bool Treeconfig::isConfigFilePresent()
+{
+ string config_file = Export::GetEnv( "SOURCE_ROOT_DIR" );
+ config_file += "/source_config";
+
+ struct stat status;
+ if( stat( config_file.c_str() , &status ) < 0 )
+ {
+ return false;
+ }
+#ifdef WNT
+ return ( status.st_mode & _S_IFREG ) && ( _access( config_file.c_str() , 4 ) >= 0 ) ;
+#else
+ return ( status.st_mode & S_IFREG ) && ( access( config_file.c_str() , R_OK ) >= 0 ) ;
+#endif
+}
+
+
+
+}
diff --git a/transex3/source/txtconv.cxx b/transex3/source/txtconv.cxx
deleted file mode 100644
index 2f442b80a83d..000000000000
--- a/transex3/source/txtconv.cxx
+++ /dev/null
@@ -1,168 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * $RCSfile: txtconv.cxx,v $
- * $Revision: 1.8 $
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_transex3.hxx"
-#include <stdio.h>
-#include <tools/fsys.hxx>
-#include <tools/stream.hxx>
-
-// local includes
-#include "utf8conv.hxx"
-
-extern void ConvertHalfwitdhToFullwidth( String& rString );
-
-/*****************************************************************************/
-void Help()
-/*****************************************************************************/
-{
- fprintf( stdout, "\n" );
- fprintf( stdout, "txtconv (c)2001 by StarOffice Entwicklungs GmbH\n" );
- fprintf( stdout, "===============================================\n" );
- fprintf( stdout, "\n" );
- fprintf( stdout, "txtconv converts textfiles from or to UTF-8\n" );
- fprintf( stdout, "\n" );
- fprintf( stdout, "Syntax: txtconv -t|-f charset filename (destinationfile)\n" );
- fprintf( stdout, "Switches: -t => conversion from charset to UTF-8\n" );
- fprintf( stdout, " -f => conversion from UTF-8 to charset\n" );
- fprintf( stdout, "\n" );
- fprintf( stdout, "Allowed charsets:\n" );
- fprintf( stdout, " MS_932 => Japanese\n" );
- fprintf( stdout, " MS_936 => Chinese Simplified\n" );
- fprintf( stdout, " MS_949 => Korean\n" );
- fprintf( stdout, " MS_950 => Chinese Traditional\n" );
- fprintf( stdout, " MS_1250 => East Europe\n" );
- fprintf( stdout, " MS_1251 => Cyrillic\n" );
- fprintf( stdout, " MS_1252 => West Europe\n" );
- fprintf( stdout, " MS_1253 => Greek\n" );
- fprintf( stdout, " MS_1254 => Turkish\n" );
- fprintf( stdout, " MS_1255 => Hebrew\n" );
- fprintf( stdout, " MS_1256 => Arabic\n" );
- fprintf( stdout, " HW2FW => Only with -t, converts half to full width katakana" );
- fprintf( stdout, "\n" );
-}
-
-/*****************************************************************************/
-#if defined(UNX) || defined(OS2)
-int main( int argc, char *argv[] )
-#else
-int _cdecl main( int argc, char *argv[] )
-#endif
-/*****************************************************************************/
-{
- if (( argc != 4 ) && ( argc != 5 )) {
- Help();
- exit ( 0 );
- }
-
- if ( ByteString( argv[ 1 ] ) == "-t" || ByteString( argv[ 1 ] ) == "-f" ) {
- rtl_TextEncoding nEncoding = RTL_TEXTENCODING_MS_1252;
-
- BOOL bHW2FW = FALSE;
-
- ByteString sCharset( argv[ 2 ] );
- sCharset.ToUpperAscii();
-
- if ( sCharset == "MS_932" ) nEncoding = RTL_TEXTENCODING_MS_932;
- else if ( sCharset == "MS_936" ) nEncoding = RTL_TEXTENCODING_MS_936;
- else if ( sCharset == "MS_949" ) nEncoding = RTL_TEXTENCODING_MS_949;
- else if ( sCharset == "MS_950" ) nEncoding = RTL_TEXTENCODING_MS_950;
- else if ( sCharset == "MS_1250" ) nEncoding = RTL_TEXTENCODING_MS_1250;
- else if ( sCharset == "MS_1251" ) nEncoding = RTL_TEXTENCODING_MS_1251;
- else if ( sCharset == "MS_1252" ) nEncoding = RTL_TEXTENCODING_MS_1252;
- else if ( sCharset == "MS_1253" ) nEncoding = RTL_TEXTENCODING_MS_1253;
- else if ( sCharset == "MS_1254" ) nEncoding = RTL_TEXTENCODING_MS_1254;
- else if ( sCharset == "MS_1255" ) nEncoding = RTL_TEXTENCODING_MS_1255;
- else if ( sCharset == "MS_1256" ) nEncoding = RTL_TEXTENCODING_MS_1256;
- else if ( sCharset == "MS_1257" ) nEncoding = RTL_TEXTENCODING_MS_1257;
- else if (( sCharset == "HW2FW" ) && ( ByteString( argv[ 1 ] ) == "-t" )) bHW2FW = TRUE;
-
- else {
- Help();
- exit ( 1 );
- }
-
- DirEntry aSource = DirEntry( String( argv[ 3 ], RTL_TEXTENCODING_ASCII_US ));
- if ( !aSource.Exists()) {
- fprintf( stderr, "\nERROR: File %s not found!\n\n", ByteString( argv[ 3 ] ).GetBuffer());
- exit ( 2 );
- }
-
- String sOutput;
- SvFileStream aOutput;
- if ( argc == 5 ) {
- sOutput= String( argv[ 4 ], RTL_TEXTENCODING_ASCII_US );
- aOutput.Open( sOutput, STREAM_STD_WRITE | STREAM_TRUNC );
- if ( !aOutput.IsOpen()) {
- fprintf( stderr, "\nERROR: Could not open output file %s!\n\n", argv[ 4 ]);
- exit ( 3 );
- }
- }
-
- String sGSI( argv[ 3 ], RTL_TEXTENCODING_ASCII_US );
- SvFileStream aGSI( sGSI, STREAM_STD_READ );
- if ( !aGSI.IsOpen()) {
- fprintf( stderr, "\nERROR: Could not open input file %s!\n\n", argv[ 3 ]);
- exit ( 3 );
- }
-
- ByteString sGSILine;
- while ( !aGSI.IsEof()) {
-
- aGSI.ReadLine( sGSILine );
- if ( bHW2FW ) {
- String sConverter( sGSILine, RTL_TEXTENCODING_UTF8 );
- ConvertHalfwitdhToFullwidth( sConverter );
- sGSILine = ByteString( sConverter, RTL_TEXTENCODING_UTF8 );
- }
- else {
- if ( ByteString( argv[ 1 ] ) == "-t" )
- sGSILine = UTF8Converter::ConvertToUTF8( sGSILine, nEncoding );
- else
- sGSILine = UTF8Converter::ConvertFromUTF8( sGSILine, nEncoding );
- }
-
- if ( aOutput.IsOpen())
- aOutput.WriteLine( sGSILine );
- else
- fprintf( stdout, "%s\n", sGSILine.GetBuffer());
- }
-
- aGSI.Close();
- if ( aOutput.IsOpen())
- aOutput.Close();
- }
- else {
- Help();
- exit( 1 );
- }
-
- return 0;
-}
diff --git a/transex3/source/xrmmerge.cxx b/transex3/source/xrmmerge.cxx
index 4daf94e2357a..f1b3d4d6cb5a 100644
--- a/transex3/source/xrmmerge.cxx
+++ b/transex3/source/xrmmerge.cxx
@@ -163,10 +163,6 @@ extern char *GetOutputFile( int argc, char* argv[])
Export::sLanguages = ByteString( argv[ i ]);
}
break;
- case STATE_ISOCODE99: {
- Export::sIsoCode99 = ByteString( argv[ i ]);
- }
- break;
}
}
}