summaryrefslogtreecommitdiff
path: root/transex3
diff options
context:
space:
mode:
authorOliver Bolte <obo@openoffice.org>2006-03-29 12:26:59 +0000
committerOliver Bolte <obo@openoffice.org>2006-03-29 12:26:59 +0000
commitf1202fb9fd8daa0fa49f13a89ee532094aec5658 (patch)
tree5c36807b14eade543bfca19d3d0d77d5bc9f3eed /transex3
parent3610b28500a8cad2e83ace7e7e184a825c6ec921 (diff)
INTEGRATION: CWS hc2opti (1.9.2); FILE MERGED
2006/02/24 17:17:49 ihi 1.9.2.5: #i55666# hc2 build speedup 2006/02/24 17:10:22 ihi 1.9.2.4: #i55666# hc2 build speedup 2006/02/14 17:25:16 ihi 1.9.2.3: fix build break caused by messy resync 2006/02/14 15:35:53 ihi 1.9.2.2: RESYNC: (1.9-1.10); FILE MERGED 2006/02/14 13:02:08 ihi 1.9.2.1: #i55666# hc2 build speedup prototype
Diffstat (limited to 'transex3')
-rw-r--r--transex3/source/helpmerge.cxx519
1 files changed, 241 insertions, 278 deletions
diff --git a/transex3/source/helpmerge.cxx b/transex3/source/helpmerge.cxx
index ccf5f70767ae..5548933befdf 100644
--- a/transex3/source/helpmerge.cxx
+++ b/transex3/source/helpmerge.cxx
@@ -4,9 +4,9 @@
*
* $RCSfile: helpmerge.cxx,v $
*
- * $Revision: 1.10 $
+ * $Revision: 1.11 $
*
- * last change: $Author: hr $ $Date: 2005-10-25 11:42:20 $
+ * last change: $Author: obo $ $Date: 2006-03-29 13:26:59 $
*
* The Contents of this file are made available subject to
* the terms of GNU Lesser General Public License Version 2.1.
@@ -35,26 +35,29 @@
#include <tools/fsys.hxx>
#include <osl/file.hxx>
// local includes
+#include <stdio.h>
#include "helpmerge.hxx"
#include "utf8conv.hxx"
#include <algorithm>
#include <sys/types.h>
#include <sys/stat.h>
+#include <iostream>
+#include <fstream>
+#include <vector>
+#include "rtl/strbuf.hxx"
#include <bootstrp/appdef.hxx>
/*****************************************************************************/
void HelpParser::FillInFallbacks( LangHashMap& rElem_out, //int nLangIdx_in ){
ByteString sLangIdx_in ){
/*****************************************************************************/
- const ByteString ENGLISH_LANGUAGECODE( "en-US" );
- const ByteString GERMAN_LANGUAGECODE ( "de" );
+ static const ByteString ENGLISH_LANGUAGECODE( "en-US" );
+ static const ByteString GERMAN_LANGUAGECODE ( "de" );
ByteString sCur;
XMLElement* pTmp = NULL;
XMLElement* pTmp2 = NULL;
- //int nReallang = Export::LangId[nLangIdx_in]; // Mapping index <-> numeric iso code
XMLUtil& rXMLUtil = XMLUtil::Instance(); // Get Singleton
- //USHORT nFallback = Export::GetFallbackLanguage( nReallang );
sCur = sLangIdx_in;
ByteString sFallback( sCur );
GetIsoFallback( sFallback );
@@ -62,10 +65,7 @@ void HelpParser::FillInFallbacks( LangHashMap& rElem_out, //int nLangIdx_in ){
pTmp2 = rElem_out[ sFallback ];
pTmp = new XMLElement( *pTmp2 ) ; // Copy
pTmp->SetPos( pTmp2->GetPos()+1 );
- //pTmp->ChangeLanguageTag( String( rXMLUtil.GetIsoLangByIndex( sLangIdx_in ) ,
- pTmp->ChangeLanguageTag( String( sLangIdx_in ,
- RTL_TEXTENCODING_ASCII_US) );
- //rElem_out[ nReallang ] = pTmp;
+ pTmp->ChangeLanguageTag( String( sLangIdx_in , RTL_TEXTENCODING_ASCII_US) );
rElem_out[ sLangIdx_in ] = pTmp;
pTmp2 = NULL;
}
@@ -73,10 +73,7 @@ void HelpParser::FillInFallbacks( LangHashMap& rElem_out, //int nLangIdx_in ){
pTmp2 = rElem_out[ ENGLISH_LANGUAGECODE ];
pTmp = new XMLElement( *pTmp2 ) ; // Copy
pTmp->SetPos( pTmp2->GetPos()+1 );
- //pTmp->ChangeLanguageTag( String( rXMLUtil.GetIsoLangByIndex( sLangIdx_in ) ,
- pTmp->ChangeLanguageTag( String( sLangIdx_in ,
- RTL_TEXTENCODING_ASCII_US) );
- //rElem_out[ nReallang ] = pTmp;
+ pTmp->ChangeLanguageTag( String( sLangIdx_in , RTL_TEXTENCODING_ASCII_US) );
rElem_out[ sCur ] = pTmp;
pTmp2 = NULL;
}
@@ -84,16 +81,11 @@ void HelpParser::FillInFallbacks( LangHashMap& rElem_out, //int nLangIdx_in ){
pTmp2 = rElem_out[ GERMAN_LANGUAGECODE ];
pTmp = new XMLElement( *pTmp2 ); // Copy
pTmp->SetPos( pTmp2->GetPos()+1 );
- //pTmp->ChangeLanguageTag( String( rXMLUtil.GetIsoLangByIndex( sLangIdx_in ),
- pTmp->ChangeLanguageTag( String( sLangIdx_in ,
- RTL_TEXTENCODING_ASCII_US ) );
- // rElem_out[ nReallang ] = pTmp;
+ pTmp->ChangeLanguageTag( String( sLangIdx_in , RTL_TEXTENCODING_ASCII_US ) );
rElem_out[ sCur ] = pTmp;
pTmp2 = NULL;
}else{
- //fprintf(stdout,"ERROR: No Fallback found for language %d:\n",nReallang);
fprintf(stdout,"ERROR: No Fallback found for language %d:\n",sCur.GetBuffer());
- //rElem_out[ nReallang ]=new XMLElement(); // Use dummy element
rElem_out[ sCur ]=new XMLElement(); // Use dummy element
}
}
@@ -108,7 +100,6 @@ void HelpParser::Dump(XMLHashMap* rElem_in) {
/*****************************************************************************/
void HelpParser::Dump(LangHashMap* rElem_in,const ByteString sKey_in) {
/*****************************************************************************/
- //int x;
ByteString x;
OString y;
fprintf(stdout,"+------------%s-----------+\n",sKey_in.GetBuffer() );
@@ -120,9 +111,11 @@ void HelpParser::Dump(LangHashMap* rElem_in,const ByteString sKey_in) {
fprintf(stdout,"+--------------------------+\n");
}
-HelpParser::HelpParser( const ByteString &rHelpFile, bool bUTF8 )
+HelpParser::HelpParser( const ByteString &rHelpFile, bool bUTF8 , bool bHasInputList )
: sHelpFile( rHelpFile ),
- bUTF8 ( bUTF8 ) {};
+ bUTF8 ( bUTF8 ),
+ bHasInputList( bHasInputList )
+ {};
/*****************************************************************************/
bool HelpParser::CreateSDF(
@@ -142,7 +135,6 @@ bool HelpParser::CreateSDF(
String sUsedTempFile;
String sXmlFile;
- //String x(sHelpFile.GetBuffer(),RTL_TEXTENCODING_UTF8 , sHelpFile.Len());
if( Export::fileHasUTF8ByteOrderMarker( sHelpFile ) ){
DirEntry aTempFile = Export::GetTempFile();
DirEntry aSourceFile( String( sHelpFile , RTL_TEXTENCODING_ASCII_US ) );
@@ -157,12 +149,9 @@ bool HelpParser::CreateSDF(
}
- //String x(sHelpFile,RTL_TEXTENCODING_ASCII_US );
- //std::auto_ptr <XMLFile> file ( aParser.Execute(x) );
std::auto_ptr <XMLFile> file ( aParser.Execute( sXmlFile ) );
if(file.get() == NULL){
- //printf("%s\n",ByteString(aParser.GetError().sMessage,RTL_TEXTENCODING_UTF8).GetBuffer());
printf("%s\n",ByteString(aParser.GetError().sMessage,RTL_TEXTENCODING_ASCII_US).GetBuffer());
exit(-1);
return false;
@@ -173,7 +162,7 @@ bool HelpParser::CreateSDF(
}
SvFileStream aSDFStream( String( rSDFFile_in, RTL_TEXTENCODING_ASCII_US ),
STREAM_STD_WRITE | STREAM_TRUNC );
- //aSDFStream.SetLineDelimiter( LINEEND_LF );
+
if ( !aSDFStream.IsOpen()) {
fprintf(stdout,"Can't open file %s\n",rSDFFile_in.GetBuffer());
return false;
@@ -187,7 +176,6 @@ bool HelpParser::CreateSDF(
ByteString sPrjEntry( aEntry.GetFull(), gsl_getSystemTextEncoding());
ByteString sActFileName(
sFullEntry.Copy( sPrjEntry.Len() + 1 ), gsl_getSystemTextEncoding());
-// sActFileName.ToLowerAscii();
sActFileName.SearchAndReplaceAll( "/", "\\" );
@@ -206,68 +194,63 @@ bool HelpParser::CreateSDF(
const OUString sOUPrj( rPrj_in.GetBuffer() , rPrj_in.Len() , RTL_TEXTENCODING_ASCII_US );
const OUString sOUActFileName(sActFileName.GetBuffer() , sActFileName.Len() , RTL_TEXTENCODING_ASCII_US );
-
-
Export::InitLanguages( false );
std::vector<ByteString> aLanguages = Export::GetLanguages();
- //for(XMLHashMap::iterator pos=aXMLStrHM->begin();pos!=aXMLStrHM->end();++pos){
std::vector<ByteString> order = file->getOrder();
std::vector<ByteString>::iterator pos;
XMLHashMap::iterator posm;
- for( pos = order.begin(); pos != order.end() ; ++pos ){
- //ByteString sKey = *pos;
+ for( pos = order.begin(); pos != order.end() ; ++pos )
+ {
posm = aXMLStrHM->find( *pos );
pElem = posm->second;
- //pElem = aXMLStrHM[ sKey ];
- //pElem=pos->second;
ByteString sCur;
- for( long int n = 0; n < aLanguages.size(); n++ ){
- sCur = aLanguages[ n ];
-
- if(pElem->find( sCur )==pElem->end()){
-
- FillInFallbacks( *pElem , sCur );
+ for( long int n = 0; n < aLanguages.size(); n++ )
+ {
+ sCur = aLanguages[ n ];
+ if(pElem->find( sCur )==pElem->end())
+ {
+ FillInFallbacks( *pElem , sCur );
+ }
+ pXMLElement = (*pElem)[ sCur ];
+
+ if( pXMLElement != NULL )
+ {
+ OUString data = pXMLElement->ToOUString();
+ String sTmp = String(data.getStr());
+ sTmp.SearchAndReplaceAll(ret,ret_char); // Remove \n
+ sTmp.SearchAndReplaceAll(tab,tab_char); // Remove \t
+
+ data = OUString( sTmp );
+ sBuffer.append( sOUPrj );
+ sBuffer.append( GSI_TAB ); //"\t";
+ if ( rRoot_in.Len())
+ sBuffer.append( sOUActFileName );
+ sBuffer.append( GSI_SEQUENCE1 ); //"\t0\thelp\t";
+ ByteString sID = posm->first; // ID
+ sBuffer.append( OUString( sID.GetBuffer() , sID.Len() , RTL_TEXTENCODING_UTF8 ) );
+ sBuffer.append( GSI_TAB ); //"\t";
+ ByteString sOldRef = pXMLElement->GetOldref(); // oldref
+ sBuffer.append( OUString(sOldRef.GetBuffer() , sOldRef.Len() , RTL_TEXTENCODING_UTF8 ) );
+ sBuffer.append( GSI_SEQUENCE2 ); //"\t\t\t0\t";
+ sBuffer.append( OUString( sCur.GetBuffer() , sCur.Len() , RTL_TEXTENCODING_UTF8 ) );
+ sBuffer.append( GSI_TAB ); //"\t";
+ sBuffer.append( data );
+ sBuffer.append( GSI_SEQUENCE4 ); //"\t\t\t\t";
+ sBuffer.append( sOUTimeStamp );
+ ByteString sOut( sBuffer.makeStringAndClear().getStr() , RTL_TEXTENCODING_UTF8 );
+ if( !sCur.EqualsIgnoreCaseAscii("de") ||( sCur.EqualsIgnoreCaseAscii("de") && !Export::isMergingGermanAllowed( rPrj_in ) ) )
+ {
+ if( data.getLength() > 0 ) aSDFStream.WriteLine( sOut );
}
+ pXMLElement=NULL;
+ }else fprintf(stdout,"\nDBG: NullPointer in HelpParser::CreateSDF , Language %s\n",sCur.GetBuffer() );
+ }
- pXMLElement = (*pElem)[ sCur ];
- if( pXMLElement != NULL ){
- OUString data = pXMLElement->ToOUString();
- String sTmp = String(data.getStr());
- sTmp.SearchAndReplaceAll(ret,ret_char); // Remove \n
- sTmp.SearchAndReplaceAll(tab,tab_char); // Remove \t
-
- data = OUString( sTmp );
- sBuffer.append( sOUPrj );
- sBuffer.append( GSI_TAB ); //"\t";
- if ( rRoot_in.Len())
- sBuffer.append( sOUActFileName );
- sBuffer.append( GSI_SEQUENCE1 ); //"\t0\thelp\t";
- ByteString sID = posm->first; // ID
- sBuffer.append( OUString( sID.GetBuffer() , sID.Len() , RTL_TEXTENCODING_UTF8 ) );
- sBuffer.append( GSI_TAB ); //"\t";
- ByteString sOldRef = pXMLElement->GetOldref(); // oldref
- sBuffer.append( OUString(sOldRef.GetBuffer() , sOldRef.Len() , RTL_TEXTENCODING_UTF8 ) );
- sBuffer.append( GSI_SEQUENCE2 ); //"\t\t\t0\t";
- //sBuffer.append( String::CreateFromInt64( Export::LangId[ i ] ) );
- sBuffer.append( OUString( sCur.GetBuffer() , sCur.Len() , RTL_TEXTENCODING_UTF8 ) );
- sBuffer.append( GSI_TAB ); //"\t";
- sBuffer.append( data );
- sBuffer.append( GSI_SEQUENCE4 ); //"\t\t\t\t";
- sBuffer.append( sOUTimeStamp );
- ByteString sOut( sBuffer.makeStringAndClear().getStr() , RTL_TEXTENCODING_UTF8 );
- if( !sCur.EqualsIgnoreCaseAscii("de") ||( sCur.EqualsIgnoreCaseAscii("de") && !Export::isMergingGermanAllowed( rPrj_in ) ) ){
- if( data.getLength() > 0 ) aSDFStream.WriteLine( sOut );
- }
- pXMLElement=NULL;
- }else fprintf(stdout,"\nDBG: NullPointer in HelpParser::CreateSDF , Language %s\n",sCur.GetBuffer() );
- }
- // }
}
//Dump(aXMLStrHM);
aSDFStream.Close();
- //fprintf(stdout,"Closing stream ...");
if( !sUsedTempFile.EqualsIgnoreCaseAscii( "" ) ){
DirEntry aTempFile( sUsedTempFile );
@@ -275,9 +258,42 @@ bool HelpParser::CreateSDF(
}
return TRUE;
}
-bool HelpParser::Merge( const ByteString &rSDFFile, const ByteString &rDestinationFile )
+
+bool HelpParser::Merge( const ByteString &rSDFFile, const ByteString &rDestinationFile ,
+ ByteString& sLanguage , MergeDataFile& aMergeDataFile )
{
- return Merge( rSDFFile , rDestinationFile , ByteString("") , false );
+
+ bool hasNoError = true;
+
+ SimpleXMLParser aParser;
+
+ String sUsedTempFile;
+ String sXmlFile;
+
+ if( Export::fileHasUTF8ByteOrderMarker( sHelpFile ) ){
+ DirEntry aTempFile = Export::GetTempFile();
+ DirEntry aSourceFile( String( sHelpFile , RTL_TEXTENCODING_ASCII_US ) );
+ aSourceFile.CopyTo( aTempFile , FSYS_ACTION_COPYFILE );
+ String sTempFile = aTempFile.GetFull();
+ Export::RemoveUTF8ByteOrderMarkerFromFile( ByteString( sTempFile , RTL_TEXTENCODING_ASCII_US ) );
+ sUsedTempFile = sTempFile;
+ sXmlFile = sTempFile;
+ }else{
+ sUsedTempFile = String::CreateFromAscii("");
+ sXmlFile = String( sHelpFile , RTL_TEXTENCODING_ASCII_US );
+ }
+
+ OUString sOUHelpFile( sXmlFile );
+
+ XMLFile* xmlfile = ( aParser.Execute( sOUHelpFile ) );
+ printf("Dest file %s\n",rDestinationFile.GetBuffer());
+ hasNoError = MergeSingleFile( xmlfile , aMergeDataFile , sLanguage , rDestinationFile );
+ delete xmlfile;
+ if( !sUsedTempFile.EqualsIgnoreCaseAscii( "" ) ){
+ DirEntry aTempFile( sUsedTempFile );
+ aTempFile.Kill();
+ }
+ return hasNoError;
}
bool ByteStringEqual( const ByteString& rKey1, const ByteString& rKey2 ) {
@@ -287,21 +303,52 @@ bool ByteStringLess( const ByteString& rKey1, const ByteString& rKey2 ) {
return rKey1.CompareTo( rKey2 )==COMPARE_LESS;
}
-/*****************************************************************************/
+void HelpParser::parse_languages( std::vector<ByteString>& aLanguages , MergeDataFile& aMergeDataFile ){
+ std::vector<ByteString> aTmp;
+
+ const ByteString DE ("de");
+ const ByteString ENUS ("en-US");
+ static const ByteString ALL( "ALL" );
+
+ Export::InitLanguages( false );
+
+ if( Export::sLanguages.EqualsIgnoreCaseAscii( ALL ) )
+ {
+ aLanguages = aMergeDataFile.GetLanguages();
+ aLanguages.push_back( DE );
+ aLanguages.push_back( ENUS );
+
+ if( !Export::sForcedLanguages.Equals("") )
+ {
+ std::vector<ByteString> aFL = Export::GetForcedLanguages();
+ std::copy( aFL.begin() ,
+ aFL.end() ,
+ back_inserter( aLanguages )
+ );
+ std::sort( aLanguages.begin() , aLanguages.end() , ByteStringLess );
+ std::vector<ByteString>::iterator unique_iter = std::unique( aLanguages.begin() , aLanguages.end() , ByteStringEqual );
+ std::copy( aLanguages.begin() , unique_iter , back_inserter( aTmp ) );
+ aLanguages = aTmp;
+ }
+ }
+ else{
+ aLanguages = Export::GetLanguages();
+ }
+
+}
+
bool HelpParser::Merge(
- const ByteString &rSDFFile, const ByteString &rPathX , const ByteString &rPathY , bool bISO )
-/*****************************************************************************/
+ const ByteString &rSDFFile, const ByteString &rPathX , const ByteString &rPathY , bool bISO ,
+ const std::vector<ByteString>& aLanguages , MergeDataFile& aMergeDataFile , bool bCreateDir )
{
bool hasNoError = true;
-
SimpleXMLParser aParser;
-
String sUsedTempFile;
String sXmlFile;
- //String x(sHelpFile.GetBuffer(),RTL_TEXTENCODING_UTF8 , sHelpFile.Len());
- if( Export::fileHasUTF8ByteOrderMarker( sHelpFile ) ){
+ if( Export::fileHasUTF8ByteOrderMarker( sHelpFile ) )
+ {
DirEntry aTempFile = Export::GetTempFile();
DirEntry aSourceFile( String( sHelpFile , RTL_TEXTENCODING_ASCII_US ) );
aSourceFile.CopyTo( aTempFile , FSYS_ACTION_COPYFILE );
@@ -309,138 +356,103 @@ bool HelpParser::Merge(
Export::RemoveUTF8ByteOrderMarkerFromFile( ByteString( sTempFile , RTL_TEXTENCODING_ASCII_US ) );
sUsedTempFile = sTempFile;
sXmlFile = sTempFile;
- }else{
+ }
+ else
+ {
sUsedTempFile = String::CreateFromAscii("");
sXmlFile = String( sHelpFile , RTL_TEXTENCODING_ASCII_US );
}
- //OUString sOUHelpFile( sHelpFile.GetBuffer(),sHelpFile.Len(),RTL_TEXTENCODING_UTF8);
OUString sOUHelpFile( sXmlFile );
+ XMLFile* xmlfile = ( aParser.Execute( sOUHelpFile ) );
+ xmlfile->Extract();
- std::auto_ptr <XMLFile> xmlfile ( aParser.Execute( sOUHelpFile ) );
-
- if( xmlfile.get() == NULL){
+ if( xmlfile == NULL)
+ {
printf("%s\n",ByteString(aParser.GetError().sMessage,RTL_TEXTENCODING_UTF8).GetBuffer());
exit(-1);
return false;
}
- std::vector<ByteString> aLanguages , aTmp;
- MergeDataFile aMergeDataFile( rSDFFile, sHelpFile , FALSE, RTL_TEXTENCODING_MS_1252, false );
- Export::InitLanguages( false );
- if( Export::sLanguages.EqualsIgnoreCaseAscii( "ALL" ) ){
- aLanguages = aMergeDataFile.GetLanguages();
- aLanguages.push_back( ByteString("de") );
- aLanguages.push_back( ByteString("en-US") );
- if( !Export::sForcedLanguages.Equals("") ){
-
- std::vector<ByteString> aFL = Export::GetForcedLanguages();
- std::copy( aFL.begin() ,
- aFL.end() ,
- back_inserter( aLanguages )
- );
- std::sort( aLanguages.begin() , aLanguages.end() , ByteStringLess );
- std::vector<ByteString>::iterator unique_iter = std::unique( aLanguages.begin() , aLanguages.end() , ByteStringEqual );
- std::copy( aLanguages.begin() , unique_iter , back_inserter( aTmp ) );
- aLanguages = aTmp;
- }
- }
- else{
- aLanguages = Export::GetLanguages();
- }
- ByteString sCur;
- for( long int n = 0; n < aLanguages.size(); n++ ){
- sCur = aLanguages[ n ];
+ ByteString sCur;
+ for( long int n = 0; n < aLanguages.size(); n++ ){
+ sCur = aLanguages[ n ];
- ByteString testpath;
- if( bISO ){
- testpath = GetOutpath( rPathX , sCur , rPathY );
- // MakeDir( testpath );
- }
- else testpath = rPathX;
- // Test
- MakeDir( testpath );
- // Test
-
- XMLFile* pFile = new XMLFile( *xmlfile );// copy new()
- std::auto_ptr <XMLFile> file ( pFile );
- file->Extract();
- //Dump( file->GetStrings() );
-
- XMLHashMap* aXMLStrHM = file->GetStrings();
- LangHashMap* aLangHM;
- ResData *pResData = NULL;
- ByteString sTmp = Export::sLanguages;
- sTmp.EraseLeadingAndTrailingChars();
- for(XMLHashMap::iterator pos=aXMLStrHM->begin();pos!=aXMLStrHM->end();++pos){
- aLangHM = pos->second;
-
- pResData = new ResData( "", pos->first );
- pResData->sResTyp = "help";
- pResData->sGId = pos->first;
- ProcessHelp( aLangHM , sCur , pResData , aMergeDataFile );
- }
+ ByteString sFilepath;
+ if( bISO ) sFilepath = GetOutpath( rPathX , sCur , rPathY );
+ else sFilepath = rPathX;
+ if( bCreateDir ) MakeDir( sFilepath );
- String merged_file( testpath , RTL_TEXTENCODING_ASCII_US ); // check and remove '\\'
-
- String aTempFile2 = Export::GetTempFile().GetFull();
- DirEntry( aTempFile2 ).Kill();
- aTempFile2.SearchAndReplaceAll( '\\' , '/' ) ;
- aTempFile2 = aTempFile2.Copy( aTempFile2.SearchBackward( '/' )+1 , aTempFile2.Len() );
- String merged_file_tmp( testpath , RTL_TEXTENCODING_ASCII_US );
- merged_file_tmp.Append( aTempFile2 );
- merged_file_tmp.Append( String( GetEnv( "INPATH" ) , RTL_TEXTENCODING_ASCII_US ) );
- //String s_merged_file_tmp( merged_file_tmp , RTL_TEXTENCODING_ASCII_US ) ;
-
- file->Write( merged_file_tmp ); // Always write!
- DirEntry present_file( merged_file );
- DirEntry aSourceFile( merged_file_tmp );
-
- OUString OUmerged_file_tmp( merged_file_tmp );
- OUString OUmerged_file( merged_file );
-//#ifdef WIN
-// merged_file_tmp.replace( '/','\\' );
-// merged_file.replace('/','\\');
-//#endif
- OUString OUmerged_file_tmp_url;
- OUString OUmerged_file_url;
-
- osl::File::getFileURLFromSystemPath(OUmerged_file_tmp, OUmerged_file_tmp_url);
- osl::File::getFileURLFromSystemPath(OUmerged_file, OUmerged_file_url);
-
-
- // Tools fsys kill / move does not work, using osl::File::move
- DirEntry aDir(".");
- aDir.ToAbs();
- OUString base( aDir.GetFull() );
-
- OUString base_url;
- osl::File::getFileURLFromSystemPath( base , base_url );
- osl::File::getAbsoluteFileURL( base_url , OUmerged_file_tmp_url , OUmerged_file_tmp );
- osl::File::getAbsoluteFileURL( base_url , OUmerged_file_url , OUmerged_file );
-
- int rc = osl::File::move( OUmerged_file_tmp , OUmerged_file );
- if ( rc != osl::File::E_None ) {
- fprintf(stderr,"ERROR: helpex failed to move merged file %s over file %s! rc = %d\n",
- OUStringToOString( OUmerged_file_tmp , RTL_TEXTENCODING_UTF8 ).getStr(),
- OUStringToOString( OUmerged_file , RTL_TEXTENCODING_UTF8 ).getStr(),
- rc);
- hasNoError = false;
- }
+ XMLFile* file = new XMLFile( *xmlfile );
+ sFilepath.Append( sHelpFile );
+ hasNoError = MergeSingleFile( file , aMergeDataFile , sCur , sFilepath );
+ delete file;
- }
- if( !sUsedTempFile.EqualsIgnoreCaseAscii( "" ) ){
+ if( !hasNoError ) return false; // Stop on error
+ }
+
+ if( !sUsedTempFile.EqualsIgnoreCaseAscii( "" ) )
+ {
DirEntry aTempFile( sUsedTempFile );
aTempFile.Kill();
}
-
+ delete xmlfile;
return hasNoError;
}
+bool HelpParser::MergeSingleFile( XMLFile* file , MergeDataFile& aMergeDataFile , const ByteString& sLanguage ,
+ ByteString sPath )
+{
+ file->Extract();
+
+ XMLHashMap* aXMLStrHM = file->GetStrings();
+ LangHashMap* aLangHM;
+ static ResData pResData( "","","");
+ pResData.sResTyp = "help";
+
+ ByteString sTmp = Export::sLanguages;
+
+ sTmp.EraseLeadingAndTrailingChars();
+
+ for(XMLHashMap::iterator pos=aXMLStrHM->begin();pos!=aXMLStrHM->end();++pos) // Merge every l10n related string
+ {
+
+ aLangHM = pos->second;
+ //printf("*********************DUMPING HASHMAP***************************************");
+ //Dump( aXMLStrHM );
+ //printf("DBG: sHelpFile = %s\n",sHelpFile.GetBuffer() );
+
+ pResData.sGId = pos->first;
+ pResData.sFilename = sHelpFile;
+
+ ProcessHelp( aLangHM , sLanguage, &pResData , aMergeDataFile );
+ }
+
+ // Init temp and target file
+ ByteString sTempFile;
+ ByteString sTargetFile( sPath );
+
+ static const ByteString INPATH = GetEnv( "INPATH" );
+ Export::getRandomName( sPath , sTempFile , INPATH );
+
+ // Write in the temp file
+ bool hasNoError = file->Write ( sTempFile );
+ if( !hasNoError ) return false;
+
+ remove( sTargetFile.GetBuffer() );
+ if( rename( sTempFile.GetBuffer() , sTargetFile.GetBuffer() ) != 0 )
+ {
+ cerr << "ERROR: helpex Can't rename file " << sTempFile.GetBuffer() << " to " << sTargetFile.GetBuffer() << "\n";
+ return false;
+ }
+
+ return true;
+}
+
ByteString HelpParser::GetOutpath( const ByteString& rPathX , const ByteString& sCur , const ByteString& rPathY ){
ByteString testpath = rPathX;
- ByteString sDelimiter( DirEntry::GetAccessDelimiter(), RTL_TEXTENCODING_ASCII_US );
+ static const ByteString sDelimiter( DirEntry::GetAccessDelimiter(), RTL_TEXTENCODING_ASCII_US );
testpath.EraseTrailingChars( '/' );
testpath.EraseTrailingChars( '\\' );
testpath += sDelimiter;
@@ -450,6 +462,7 @@ ByteString HelpParser::GetOutpath( const ByteString& rPathX , const ByteString&
sRelativePath.EraseLeadingChars( '/' );
sRelativePath.EraseLeadingChars( '\\' );
testpath += sRelativePath;
+ testpath += sDelimiter;
return testpath;
}
void HelpParser::MakeDir( const ByteString& sPath ){
@@ -458,75 +471,15 @@ void HelpParser::MakeDir( const ByteString& sPath ){
DirEntry aDirEntry( sDir );
ByteString sTDir( sDir , sDir.Len() , RTL_TEXTENCODING_ASCII_US );
- if( aDirEntry.MakeDir() ){
+ if( aDirEntry.MakeDir() ){ // Errorhandling ?
// printf("ERROR: Could NOT create Directory %s\n",sTDir.GetBuffer() );
// exit( -1 );
}
-
}
-/*****************************************************************************/
-//bool HelpParser::Merge(
-// const ByteString &rSDFFile, const ByteString &rDestinationFile )
-/*****************************************************************************/
-/*{
-
- SimpleXMLParser aParser;
- OUString sOUHelpFile( sHelpFile.GetBuffer(),sHelpFile.Len(),RTL_TEXTENCODING_UTF8);
- std::auto_ptr <XMLFile> file ( aParser.Execute( sOUHelpFile ) );
-
- if(file.get() == NULL){
- printf("%s\n",ByteString(aParser.GetError().sMessage,RTL_TEXTENCODING_UTF8).GetBuffer());
- exit(-1);
- return false;
- }
-
- file->Extract();
-
- MergeDataFile aMergeDataFile( rSDFFile, FALSE, RTL_TEXTENCODING_MS_1252, false );
-
- XMLHashMap* aXMLStrHM = file->GetStrings();
- LangHashMap* aLangHM;
- ResData *pResData = NULL;
- ByteString sTmp = Export::sLanguages;
- sTmp.EraseLeadingAndTrailingChars();
- bool bAll = sTmp.ToUpperAscii().Equals("ALL");
-
- for(XMLHashMap::iterator pos=aXMLStrHM->begin();pos!=aXMLStrHM->end();++pos){
- aLangHM = pos->second;
- ByteString sCur;
-
- if( bAll ){
- int nSize = aMergeDataFile.LanguagesCnt();
- for( ByteStringSet::const_iterator posl = aMergeDataFile.LanguagesBeginIter();
- posl != aMergeDataFile.LanguagesEndIter(); ++posl ){
- sCur = *posl;
- pResData = new ResData( "", pos->first );
- pResData->sResTyp = "help";
- pResData->sGId = pos->first;
- Process( aLangHM , sCur , pResData , aMergeDataFile );
- }
- }
- else{
- for( ByteStringBoolHashMap::const_iterator posl = Export::AllLanguagesBeginIter() ;
- posl != Export::AllLanguagesEndIter(); ++posl){
- sCur = posl->first;
- pResData = new ResData( "", pos->first );
- pResData->sResTyp = "help";
- pResData->sGId = pos->first;
- Process( aLangHM , sCur , pResData , aMergeDataFile );
- }
- }
- }
- String test(rDestinationFile.GetBuffer(),rDestinationFile.Len(),RTL_TEXTENCODING_UTF8);
- //test.Append( String::CreateFromAscii(".tmp") );
- file->Write(test); // Always write!
- //Dump(aXMLStrHM);
- return true;
-} */
/* ProcessHelp Methode: search for en-US entry and replace it with the current language*/
-void HelpParser::ProcessHelp( LangHashMap* aLangHM , ByteString& sCur , ResData *pResData , MergeDataFile& aMergeDataFile ){
+void HelpParser::ProcessHelp( LangHashMap* aLangHM , const ByteString& sCur , ResData *pResData , MergeDataFile& aMergeDataFile ){
XMLElement* pXMLElement = NULL;
PFormEntrys *pEntrys = NULL;
@@ -549,40 +502,40 @@ void HelpParser::ProcessHelp( LangHashMap* aLangHM , ByteString& sCur , ResData
if( !sCur.EqualsIgnoreCaseAscii("en-US") ){
#endif
pXMLElement = (*aLangHM)[ "en-US" ];
- if( pXMLElement == NULL ){
- printf("Error: Can't find en-US entry");
+ if( pXMLElement == NULL )
+ {
+ printf("Error: Can't find en-US entry\n");
}
- if( pXMLElement != NULL ){
+ if( pXMLElement != NULL )
+ {
parent = pXMLElement->GetParent();
sLId = pXMLElement->GetOldref();
pResData->sId = sLId;
pEntrys = aMergeDataFile.GetPFormEntrys( pResData );
- if( pEntrys != NULL) {
+ if( pEntrys != NULL)
+ {
ByteString sNewText;
pEntrys->GetText( sNewText, STRING_TYP_TEXT, sCur , true );
sNewdata = String( sNewText , RTL_TEXTENCODING_UTF8 );
- if ( sNewdata.Len()) {
- if( pXMLElement != NULL ){
+ if ( sNewdata.Len())
+ {
+ if( pXMLElement != NULL )
+ {
data = new XMLData( sNewdata , NULL , true ); // Add new one
pXMLElement->RemoveAndDeleteAllChilds();
pXMLElement->AddChild( data );
- // pXMLElement->ChangeLanguageTag( String( sCur , RTL_TEXTENCODING_ASCII_US) );
aLangHM->erase( sCur );
}
- } else
- // pXMLElement->ChangeLanguageTag( String( sCur , RTL_TEXTENCODING_ASCII_US) );
-
- delete pResData;
+ }
}else if( pResData == NULL ){fprintf(stdout,"Can't find GID=%s LID=%s TYP=%s\n",pResData->sGId.GetBuffer(),pResData->sId.GetBuffer(),pResData->sResTyp.GetBuffer());}
pXMLElement->ChangeLanguageTag( String( sCur , RTL_TEXTENCODING_ASCII_US) );
-
}
}
}
/* Process() Method merges */
-void HelpParser::Process( LangHashMap* aLangHM , ByteString& sCur , ResData *pResData , MergeDataFile& aMergeDataFile ){
+void HelpParser::Process( LangHashMap* aLangHM , const ByteString& sCur , ResData *pResData , MergeDataFile& aMergeDataFile ){
XMLElement* pXMLElement = NULL;
PFormEntrys *pEntrys = NULL;
@@ -605,36 +558,45 @@ void HelpParser::Process( LangHashMap* aLangHM , ByteString& sCur , ResData *pRe
if( !sCur.EqualsIgnoreCaseAscii("en-US") ){
#endif
pXMLElement = (*aLangHM)[ sCur ];
- if( pXMLElement == NULL ){
+ if( pXMLElement == NULL )
+ {
FillInFallbacks( *aLangHM , sCur );
pXMLElement = ( *aLangHM )[ sCur ];
isFallback = true;
}
- if( pXMLElement != NULL ){
+ if( pXMLElement != NULL )
+ {
parent = pXMLElement->GetParent();
sLId = pXMLElement->GetOldref();
pResData->sId = sLId;
pEntrys = aMergeDataFile.GetPFormEntrys( pResData );
- if( pEntrys != NULL) {
+ if( pEntrys != NULL)
+ {
ByteString sNewText;
pEntrys->GetText( sNewText, STRING_TYP_TEXT, sCur , true );
sNewdata = String( sNewText , RTL_TEXTENCODING_UTF8 );
- if ( sNewdata.Len()) {
+ if ( sNewdata.Len())
+ {
printf("Entries found\n");
- if( pXMLElement != NULL ){
+ if( pXMLElement != NULL )
+ {
data = new XMLData( sNewdata , NULL , true ); // Add new one
- if( pXMLElement->ToOUString().compareTo( OUString(data->GetData()) ) != 0 ){
+ if( pXMLElement->ToOUString().compareTo( OUString(data->GetData()) ) != 0 )
+ {
pXMLElement->RemoveAndDeleteAllChilds();
pXMLElement->AddChild( data );
}
- if( isFallback ){
+ if( isFallback )
+ {
xmldefault = new XMLDefault( String::CreateFromAscii("\n") , NULL );
int pos = parent->GetPos( pXMLElement->GetId() );
- if( pos != -1 ){
+ if( pos != -1 )
+ {
parent->AddChild(xmldefault , pos+1 );
parent->AddChild(pXMLElement , pos+2 );
- }else fprintf(stdout,"ERROR: Can't find reference Element of id %s language %d\n",pXMLElement->GetId().GetBuffer(),curLang);
+ }
+ else fprintf(stdout,"ERROR: Can't find reference Element of id %s language %d\n",pXMLElement->GetId().GetBuffer(),curLang);
}
aLangHM->erase( sCur );
@@ -646,3 +608,4 @@ void HelpParser::Process( LangHashMap* aLangHM , ByteString& sCur , ResData *pRe
}
}
+