summaryrefslogtreecommitdiff
path: root/transex3/source/merge.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'transex3/source/merge.cxx')
-rw-r--r--transex3/source/merge.cxx378
1 files changed, 378 insertions, 0 deletions
diff --git a/transex3/source/merge.cxx b/transex3/source/merge.cxx
new file mode 100644
index 000000000000..28215f6e81e0
--- /dev/null
+++ b/transex3/source/merge.cxx
@@ -0,0 +1,378 @@
+/*************************************************************************
+ *
+ * $RCSfile: merge.cxx,v $
+ *
+ * $Revision: 1.1.1.1 $
+ *
+ * last change: $Author: hr $ $Date: 2000-09-18 17:03:26 $
+ *
+ * The Contents of this file are made available subject to the terms of
+ * either of the following licenses
+ *
+ * - GNU Lesser General Public License Version 2.1
+ * - Sun Industry Standards Source License Version 1.1
+ *
+ * Sun Microsystems Inc., October, 2000
+ *
+ * GNU Lesser General Public License Version 2.1
+ * =============================================
+ * Copyright 2000 by Sun Microsystems, Inc.
+ * 901 San Antonio Road, Palo Alto, CA 94303, USA
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software Foundation.
+ *
+ * This library 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 for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ *
+ *
+ * Sun Industry Standards Source License Version 1.1
+ * =================================================
+ * The contents of this file are subject to the Sun Industry Standards
+ * Source License Version 1.1 (the "License"); You may not use this file
+ * except in compliance with the License. You may obtain a copy of the
+ * License at http://www.openoffice.org/license.html.
+ *
+ * Software provided under this License is provided on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+ * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
+ * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
+ * See the License for the specific provisions governing your rights and
+ * obligations concerning the Software.
+ *
+ * The Initial Developer of the Original Code is: Sun Microsystems, Inc.
+ *
+ * Copyright: 2000 by Sun Microsystems, Inc.
+ *
+ * All Rights Reserved.
+ *
+ * Contributor(s): _______________________________________
+ *
+ *
+ ************************************************************************/
+#include <stdio.h>
+#include <tools/fsys.hxx>
+#include "export.hxx"
+
+//
+// class PFormEntrys
+//
+
+/*****************************************************************************/
+BOOL PFormEntrys::GetText( ByteString &rReturn,
+ USHORT nTyp, USHORT nLangIndex, BOOL bDel )
+/*****************************************************************************/
+{
+ BOOL bReturn;
+ switch ( nTyp ) {
+ case STRING_TYP_TEXT :
+ rReturn = sText[ nLangIndex ];
+ if ( bDel )
+ sText[ nLangIndex ] = "";
+ bReturn = bTextFirst[ nLangIndex ];
+ bTextFirst[ nLangIndex ] = FALSE;
+ break;
+ case STRING_TYP_HELPTEXT :
+ rReturn = sHelpText;
+ break;
+ case STRING_TYP_QUICKHELPTEXT :
+ rReturn = sQuickHelpText[ nLangIndex ];
+ if ( bDel )
+ sQuickHelpText[ nLangIndex ] = "";
+ bReturn = bQuickHelpTextFirst[ nLangIndex ];
+ bQuickHelpTextFirst[ nLangIndex ] = FALSE;
+ break;
+ case STRING_TYP_TITLE :
+ rReturn = sTitle[ nLangIndex ];
+ if ( bDel )
+ sTitle[ nLangIndex ] = "";
+ bReturn = bTitleFirst[ nLangIndex ];
+ bTitleFirst[ nLangIndex ] = FALSE;
+ break;
+ }
+ return bReturn;
+}
+
+
+//
+// class MergeData
+//
+
+/*****************************************************************************/
+MergeData::~MergeData()
+/*****************************************************************************/
+{
+ for ( ULONG i = 0; i < Count(); i++ )
+ delete GetObject( i );
+}
+
+/*****************************************************************************/
+PFormEntrys *MergeData::GetPFormEntrys( ResData *pResData )
+/*****************************************************************************/
+{
+ for ( ULONG i = 0; i < Count(); i++ ) {
+ if ( *GetObject( i ) == pResData->sPForm )
+ return GetObject( i );
+ }
+ return 0;
+}
+
+/*****************************************************************************/
+PFormEntrys *MergeData::InsertEntry( const ByteString &rPForm )
+/*****************************************************************************/
+{
+ PFormEntrys *pEntrys = new PFormEntrys( rPForm );
+ Insert( pEntrys, LIST_APPEND );
+ return pEntrys;
+}
+
+/*****************************************************************************/
+BOOL MergeData::operator==( ResData *pData )
+/*****************************************************************************/
+{
+ return (( pData->sId == sLID ) &&
+ ( pData->sGId == sGID ) &&
+ ( ByteString( pData->sResTyp ).ToUpperAscii() ==
+ ByteString( sTyp ).ToUpperAscii()));
+}
+
+//
+// class MergeDataFile
+//
+
+/*****************************************************************************/
+MergeDataFile::MergeDataFile( const ByteString &rFileName, BOOL bErrLog,
+ CharSet aCharSet )
+/*****************************************************************************/
+ : bErrorLog( bErrLog )
+{
+ SvFileStream aInputStream( String( rFileName, RTL_TEXTENCODING_ASCII_US ), STREAM_STD_READ );
+ aInputStream.SetStreamCharSet( aCharSet );
+// aInputStream.SetTargetCharSet( aCharSet );
+
+ ByteString sLine;
+
+ ByteString sTYP;
+ ByteString sGID;
+ ByteString sLID;
+ ByteString sPFO;
+ USHORT nLANG;
+ ByteString sTEXT;
+ ByteString sQHTEXT;
+ ByteString sTITLE;
+
+ fprintf( stdout, "Scanning File %s ...\n", rFileName.GetBuffer());
+ while ( !aInputStream.IsEof()) {
+ aInputStream.ReadLine( sLine );
+ sLine = sLine.Convert( RTL_TEXTENCODING_MS_1252, aCharSet );
+ sTYP = sLine.GetToken( 1, '\t' );
+ sTYP = sTYP.Copy( 1 ); sTYP.Erase( sTYP.Len() - 1 );
+ sGID = sLine.GetToken( 2, '\t' );
+ sGID = sGID.Copy( 1 ); sGID.Erase( sGID.Len() - 1 );
+ sLID = sLine.GetToken( 3, '\t' );
+ sLID = sLID.Copy( 1 ); sLID.Erase( sLID.Len() - 1 );
+ sPFO = sLine.GetToken( 4, '\t' );
+ sPFO = sPFO.Copy( 1 ); sPFO.Erase( sPFO.Len() - 1 );
+ nLANG = sLine.GetToken( 5, '\t' ).ToInt32();
+ sTEXT = sLine.GetToken( 6, '\t' );
+ sTEXT = sTEXT.Copy( 1 ); sTEXT.Erase( sTEXT.Len() - 1 );
+ sQHTEXT = sLine.GetToken( 8, '\t' );
+ sQHTEXT = sQHTEXT.Copy( 1 ); sQHTEXT.Erase( sQHTEXT.Len() - 1 );
+ sTITLE = sLine.GetToken( 9, '\t' );
+ sTITLE = sTITLE.Copy( 1 ); sTITLE.Erase( sTITLE.Len() - 1 );
+
+ // create new res entry
+ if (( nLANG != 49 ) && ( LANGUAGE_ALLOWED( GetLangIndex( nLANG ))))
+ InsertEntry( sTYP, sGID, sLID, sPFO, nLANG, sTEXT, sQHTEXT, sTITLE );
+ }
+ aInputStream.Close();
+ fprintf( stdout, "Merging ...\n" );
+}
+
+/*****************************************************************************/
+MergeDataFile::~MergeDataFile()
+/*****************************************************************************/
+{
+ for ( ULONG i = 0; i < Count(); i++ ) {
+ MergeData *pData = GetObject( i );
+ delete pData;
+ }
+}
+
+/*****************************************************************************/
+void MergeDataFile::WriteErrorLog( const ByteString &rFileName )
+/*****************************************************************************/
+{
+ if ( bErrorLog ) {
+ DirEntry aDirEntry( String( rFileName, RTL_TEXTENCODING_ASCII_US ));
+ aDirEntry.SetExtension( String( "err", RTL_TEXTENCODING_ASCII_US ));
+ sErrorLog = ByteString( aDirEntry.GetFull(), RTL_TEXTENCODING_ASCII_US );
+ }
+ for ( ULONG i = 0; i < Count(); i++ ) {
+ MergeData *pData = GetObject( i );
+
+ for ( ULONG j = 0; j < pData->Count(); j++ ) {
+ PFormEntrys *pEntrys = pData->GetObject( j );
+ for ( USHORT nLangIndex = 0; nLangIndex < LANGUAGES; nLangIndex++ ) {
+ if ( pEntrys->sText[ nLangIndex ].Len() ||
+ pEntrys->sQuickHelpText[ nLangIndex ].Len() ||
+ pEntrys->sTitle[ nLangIndex ].Len())
+ {
+ ByteString sLine( "0\t" );
+ sLine += pData->sTyp; sLine += "\t";
+ sLine += pData->sGID; sLine += "\t";
+ sLine += pData->sLID; sLine += "\t";
+ sLine += Export::LangId[ nLangIndex ]; sLine += "\t";
+ sLine += pEntrys->sText[ nLangIndex ]; sLine += "\t\t";
+ sLine += pEntrys->sQuickHelpText[ nLangIndex ]; sLine += "\t";
+ sLine += pEntrys->sTitle[ nLangIndex ];
+ WriteError( sLine );
+ }
+ }
+ }
+ }
+ if ( aErrLog.IsOpen())
+ aErrLog.Close();
+}
+
+/*****************************************************************************/
+void MergeDataFile::WriteError( const ByteString &rLine )
+/*****************************************************************************/
+{
+ if ( bErrorLog ) {
+ if ( !aErrLog.IsOpen())
+ aErrLog.Open( String( sErrorLog, RTL_TEXTENCODING_ASCII_US ), STREAM_STD_WRITE | STREAM_TRUNC );
+ aErrLog.WriteLine( rLine );
+ }
+ else
+ fprintf( stderr, "%s\n", rLine.GetBuffer());
+}
+
+/*****************************************************************************/
+MergeData *MergeDataFile::GetMergeData( ResData *pResData )
+/*****************************************************************************/
+{
+ ByteString sOldG = pResData->sGId;
+ ByteString sOldL = pResData->sId;
+ ByteString sGID = pResData->sGId;
+ ByteString sLID;
+ if ( !sGID.Len())
+ sGID = pResData->sId;
+ else
+ sLID = pResData->sId;
+ pResData->sGId = sGID;
+ pResData->sId = sLID;
+
+ for ( ULONG i = 0; i < Count(); i++ ) {
+ if ( *GetObject( i ) == pResData ) {
+ pResData->sGId = sOldG;
+ pResData->sId = sOldL;
+ return GetObject( i );
+ }
+ }
+ pResData->sGId = sOldG;
+ pResData->sId = sOldL;
+ return NULL;
+}
+
+/*****************************************************************************/
+PFormEntrys *MergeDataFile::GetPFormEntrys( ResData *pResData )
+/*****************************************************************************/
+{
+ // search for requested PFormEntrys
+ MergeData *pData = GetMergeData( pResData );
+ if ( pData )
+ return pData->GetPFormEntrys( pResData );
+ return NULL;
+}
+
+/*****************************************************************************/
+void MergeDataFile::InsertEntry(
+ const ByteString &rTYP, const ByteString &rGID,
+ const ByteString &rLID, const ByteString &rPFO,
+ USHORT nLANG, const ByteString &rTEXT,
+ const ByteString &rQHTEXT, const ByteString &rTITLE )
+/*****************************************************************************/
+{
+ MergeData *pData;
+ BOOL bFound = FALSE;
+
+ // search for MergeData
+ for ( long int i = Count() - 1; i >= 0 && !bFound; i-- ) {
+ pData = GetObject( i );
+ if (( pData->sLID == rLID ) &&
+ ( pData->sGID == rGID ) &&
+ ( pData->sTyp == rTYP )) bFound = TRUE;
+ }
+
+ if ( !bFound ) {
+ // create new MergeData, cause no one exists with current properties
+ pData = new MergeData( rTYP, rGID, rLID );
+ Insert( pData, LIST_APPEND );
+ }
+
+ bFound = FALSE;
+ PFormEntrys *pFEntrys;
+
+ // search for PFormEntrys
+ for ( i = pData->Count() - 1; i >= 0 && !bFound; i-- ) {
+ pFEntrys = pData->GetObject( i );
+ if ( *pFEntrys == rPFO )
+ bFound = TRUE;
+ }
+
+ if ( !bFound ) {
+ // create new PFormEntrys, cause no one exists with current properties
+ pFEntrys = new PFormEntrys( rPFO );
+ pData->Insert( pFEntrys, LIST_APPEND );
+ }
+
+ // finaly insert the cur string
+ pFEntrys->InsertEntry( GetLangIndex( nLANG ),
+ rTEXT, rQHTEXT, rTITLE );
+
+}
+
+/*****************************************************************************/
+USHORT MergeDataFile::GetLangIndex( USHORT nId )
+/*****************************************************************************/
+{
+ switch ( nId ) {
+ case COMMENT: return COMMENT_INDEX;
+ case ENGLISH_US: return ENGLISH_US_INDEX;
+ case PORTUGUESE: return PORTUGUESE_INDEX;
+ case RUSSIAN: return RUSSIAN_INDEX;
+ case GREEK: return GREEK_INDEX;
+ case DUTCH: return DUTCH_INDEX;
+ case FRENCH: return FRENCH_INDEX;
+ case SPANISH: return SPANISH_INDEX;
+ case FINNISH: return FINNISH_INDEX;
+ case HUNGARIAN: return HUNGARIAN_INDEX;
+ case ITALIAN: return ITALIAN_INDEX;
+ case CZECH: return CZECH_INDEX;
+ case SLOVAK: return SLOVAK_INDEX;
+ case ENGLISH: return ENGLISH_INDEX;
+ case DANISH: return DANISH_INDEX;
+ case SWEDISH: return SWEDISH_INDEX;
+ case NORWEGIAN: return NORWEGIAN_INDEX;
+ case POLISH: return POLISH_INDEX;
+ case GERMAN: return GERMAN_INDEX;
+ case PORTUGUESE_BRAZILIAN: return PORTUGUESE_BRAZILIAN_INDEX;
+ case JAPANESE: return JAPANESE_INDEX;
+ case KOREAN: return KOREAN_INDEX;
+ case CHINESE_SIMPLIFIED: return CHINESE_SIMPLIFIED_INDEX;
+ case CHINESE_TRADITIONAL: return CHINESE_TRADITIONAL_INDEX;
+ case TURKISH: return TURKISH_INDEX;
+ case ARABIC: return ARABIC_INDEX;
+ case HEBREW: return HEBREW_INDEX;
+ }
+ return 0xFFFF;
+}