summaryrefslogtreecommitdiff
path: root/l10ntools/source/export.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'l10ntools/source/export.cxx')
-rw-r--r--l10ntools/source/export.cxx2478
1 files changed, 0 insertions, 2478 deletions
diff --git a/l10ntools/source/export.cxx b/l10ntools/source/export.cxx
deleted file mode 100644
index 46bbc769aa..0000000000
--- a/l10ntools/source/export.cxx
+++ /dev/null
@@ -1,2478 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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_l10ntools.hxx"
-#include <stdio.h>
-#include <stdlib.h>
-#include <tools/fsys.hxx>
-#include "export.hxx"
-#include "tokens.h"
-#include <iostream>
-#include <vector>
-#include <rtl/strbuf.hxx>
-
-extern "C" { int yyerror( const char * ); }
-extern "C" { int YYWarning( const char * ); }
-
-Export *pExport = 0L;
-
-// defines to parse command line
-#define STATE_NON 0x0001
-#define STATE_INPUT 0x0002
-#define STATE_OUTPUT 0x0003
-#define STATE_PRJ 0x0004
-#define STATE_ROOT 0x0005
-#define STATE_MERGESRC 0x0006
-#define STATE_ERRORLOG 0x0007
-#define STATE_BREAKHELP 0x0008
-#define STATE_UNMERGE 0x0009
-#define STATE_UTF8 0x000A
-#define STATE_LANGUAGES 0X000B
-
-// set of global variables
-typedef ::std::vector< ByteString* > FileList;
-FileList aInputFileList;
-sal_Bool bEnableExport;
-sal_Bool bMergeMode;
-sal_Bool bErrorLog;
-sal_Bool bBreakWhenHelpText;
-sal_Bool bUnmerge;
-sal_Bool bUTF8;
-ByteString sPrj;
-ByteString sPrjRoot;
-ByteString sActFileName;
-ByteString sOutputFile;
-ByteString sMergeSrc;
-ByteString sTempFile;
-ByteString sFile;
-MergeDataFile *pMergeDataFile;
-FILE *pTempFile;
-
-
-ByteString sStrBuffer;
-bool bMarcro = false;
-
-extern "C" {
-// the whole interface to lexer is in this extern "C" section
-
-
-/*****************************************************************************/
-extern char *GetOutputFile( int argc, char* argv[])
-/*****************************************************************************/
-{
- bEnableExport = sal_False;
- bMergeMode = sal_False;
- bErrorLog = sal_True;
- bBreakWhenHelpText = sal_False;
- bUnmerge = sal_False;
- bUTF8 = sal_True;
- sPrj = "";
- sPrjRoot = "";
- sActFileName = "";
- Export::sLanguages = "";
- Export::sForcedLanguages = "";
- sTempFile = "";
- pTempFile = NULL;
- sal_uInt16 nState = STATE_NON;
- sal_Bool bInput = sal_False;
-
- // parse command line
- for( int i = 1; i < argc; i++ ) {
- ByteString sSwitch( argv[ i ] );
-
- if (sSwitch == "-i" || sSwitch == "-I" ) {
- nState = STATE_INPUT; // next tokens specifies source files
- }
- else if (sSwitch == "-o" || sSwitch == "-O" ) {
- nState = STATE_OUTPUT; // next token specifies the dest file
- }
- else if (sSwitch == "-p" || sSwitch == "-P" ) {
- nState = STATE_PRJ; // next token specifies the cur. project
- }
-
- else if (sSwitch == "-r" || sSwitch == "-R" ) {
- nState = STATE_ROOT; // next token specifies path to project root
- }
- else if (sSwitch == "-m" || sSwitch == "-M" ) {
- nState = STATE_MERGESRC; // next token specifies the merge database
- }
- else if (sSwitch == "-e" || sSwitch == "-E" ) {
- nState = STATE_ERRORLOG;
- bErrorLog = sal_False;
- }
- else if (sSwitch == "-b" || sSwitch == "-B" ) {
- nState = STATE_BREAKHELP;
- bBreakWhenHelpText = sal_True;
- }
- else if (sSwitch == "-u" || sSwitch == "-U" ) {
- nState = STATE_UNMERGE;
- bUnmerge = sal_True;
- bMergeMode = sal_True;
- }
- else if ( sSwitch.ToUpperAscii() == "-UTF8" ) {
- nState = STATE_UTF8;
- bUTF8 = sal_True;
- }
- else if ( sSwitch.ToUpperAscii() == "-NOUTF8" ) {
- nState = STATE_UTF8;
- bUTF8 = sal_False;
- }
- else if ( sSwitch == "-l" || sSwitch == "-L" ) {
- nState = STATE_LANGUAGES;
- }
- else {
- switch ( nState ) {
- case STATE_NON: {
- return NULL; // no valid command line
- }
- case STATE_INPUT: {
- aInputFileList.push_back( new ByteString( argv[ i ] ) );
- bInput = sal_True; // min. one source file found
- }
- break;
- case STATE_OUTPUT: {
- sOutputFile = ByteString( argv[ i ]); // the dest. file
- }
- break;
- case STATE_PRJ: {
- sPrj = ByteString( argv[ i ]);
- }
- break;
- case STATE_ROOT: {
- sPrjRoot = ByteString( argv[ i ]); // path to project root
- }
- break;
- case STATE_MERGESRC: {
- sMergeSrc = ByteString( argv[ i ]);
- bMergeMode = sal_True; // activate merge mode, cause merge database found
- }
- break;
- case STATE_LANGUAGES: {
- Export::sLanguages = ByteString( argv[ i ]);
- }
- break;
- }
- }
- }
- if( bUnmerge ) sMergeSrc = ByteString();
- if ( bInput ) {
- // command line is valid
- bEnableExport = sal_True;
- char *pReturn = new char[ sOutputFile.Len() + 1 ];
- strcpy( pReturn, sOutputFile.GetBuffer()); // #100211# - checked
- return pReturn;
- }
-
- // command line is not valid
- return NULL;
-}
-/*****************************************************************************/
-int InitExport( char *pOutput , char* pFilename )
-/*****************************************************************************/
-{
- // instanciate Export
- ByteString sOutput( pOutput );
- ByteString sFilename( pFilename );
-
- if ( bMergeMode && !bUnmerge ) {
- // merge mode enabled, so read database
- pExport = new Export(sOutput, bEnableExport, sPrj, sPrjRoot, sMergeSrc , sFilename );
- }
- else
- // no merge mode, only export
- pExport = new Export( sOutput, bEnableExport, sPrj, sPrjRoot , sFilename );
- return 1;
-}
-
-/*****************************************************************************/
-int EndExport()
-/*****************************************************************************/
-{
- delete pExport;
- return 1;
-}
-
-extern const char* getFilename()
-{
- return (*(aInputFileList[ 0 ])).GetBuffer();
-}
-/*****************************************************************************/
-extern FILE *GetNextFile()
-/*****************************************************************************/
-{
- // look for next valid filename in input file list
- if ( sTempFile.Len()) {
- fclose( pTempFile );
- String sTemp( sTempFile, RTL_TEXTENCODING_ASCII_US );
- DirEntry aTemp( sTemp );
- aTemp.Kill();
- }
-
- while ( !aInputFileList.empty() ) {
- ByteString sFileName( *(aInputFileList[ 0 ]) );
-
- ByteString sOrigFile( sFileName );
-
- sFileName = Export::GetNativeFile( sFileName );
- delete aInputFileList[ 0 ];
- aInputFileList.erase( aInputFileList.begin() );
-
- if ( sFileName == "" ) {
- fprintf( stderr, "ERROR: Could not precompile File %s\n",
- sOrigFile.GetBuffer());
- return GetNextFile();
- }
-
- sTempFile = sFileName;
- Export::RemoveUTF8ByteOrderMarkerFromFile( sFileName );
-
- // able to open file?
- FILE *pFile = fopen( sFileName.GetBuffer(), "r" );
- if ( !pFile )
- fprintf( stderr, "Error: Could not open File %s\n",
- sFileName.GetBuffer());
- else {
- pTempFile = pFile;
-
- // this is a valid file which can be opened, so
- // create path to project root
- DirEntry aEntry( String( sOrigFile, RTL_TEXTENCODING_ASCII_US ));
- aEntry.ToAbs();
- ByteString sFullEntry( aEntry.GetFull(), RTL_TEXTENCODING_ASCII_US );
- aEntry += DirEntry( String( "..", RTL_TEXTENCODING_ASCII_US ));
- aEntry += DirEntry( sPrjRoot );
- ByteString sPrjEntry( aEntry.GetFull(), RTL_TEXTENCODING_ASCII_US );
-
- // create file name, beginnig with project root
- // (e.g.: source\ui\src\menue.src)
- sActFileName = sFullEntry.Copy( sPrjEntry.Len() + 1 );
-
-
- sActFileName.SearchAndReplaceAll( "/", "\\" );
- sFile = sActFileName;
-
- if ( pExport ) {
- // create instance of class export
- pExport->Init();
- }
- // return the valid file handle
- return pFile;
- }
- }
- // this means the file could not be opened
- return NULL;
-}
-
-int Parse( int nTyp, const char *pTokenText ){
- pExport->Execute( nTyp , pTokenText );
- return 1;
-}
-void Close(){
- pExport->pParseQueue->Close();
-}
-/*****************************************************************************/
-int WorkOnTokenSet( int nTyp, char *pTokenText )
-/*****************************************************************************/
-{
-
- pExport->pParseQueue->Push( QueueEntry( nTyp , ByteString( pTokenText ) ) );
- return 1;
-}
-
-} // extern
-
-extern "C" {
-/*****************************************************************************/
-int SetError()
-/*****************************************************************************/
-{
- // set error at global instance of class Export
- pExport->SetError();
- return 1;
-}
-}
-
-extern "C" {
-/*****************************************************************************/
-int GetError()
-/*****************************************************************************/
-{
- // get error at global instance of class Export
- if ( pExport->GetError())
- return 1;
- return sal_False;
-}
-}
-
-//
-// class ResData
-//
-
-void ResData::Dump(){
- printf("**************\nResData\n");
- printf("sPForm = %s , sResTyp = %s , sId = %s , sGId = %s , sHelpId = %s\n",sPForm.GetBuffer()
- ,sResTyp.GetBuffer(),sId.GetBuffer(),sGId.GetBuffer(),sHelpId.GetBuffer());
-
- ByteString a("*pStringList");
- ByteString b("*pUIEntries");
- ByteString c("*pFilterList");
- ByteString d("*pItemList");
- ByteString e("*pPairedList");
- ByteString f("sText");
-
- Export::DumpMap( f , sText );
-
- if( pStringList ) Export::DumpExportList( a , *pStringList );
- if( pUIEntries ) Export::DumpExportList( b , *pUIEntries );
- if( pFilterList ) Export::DumpExportList( c , *pFilterList );
- if( pItemList ) Export::DumpExportList( d , *pItemList );
- if( pPairedList ) Export::DumpExportList( e , *pPairedList );
- printf("\n");
-}
-
-void ResData::addFallbackData( ByteString& sId_in , const ByteString& sText_in ){
- aFallbackData[ sId_in ] = sText_in;
-}
-bool ResData::getFallbackData( ByteString& sId_in , ByteString& sText_inout ){
- sText_inout = aFallbackData[ sId_in ];
- return sText_inout.Len() > 0;
-}
-
-void ResData::addMergedLanguage(rtl::OString& rLang)
-{
- aMergedLanguages[rLang] = rtl::OString(RTL_CONSTASCII_STRINGPARAM("1"));
-}
-
-bool ResData::isMerged(rtl::OString& rLang)
-{
- return aMergedLanguages[rLang].equalsL(RTL_CONSTASCII_STRINGPARAM("1"));
-}
-
-/*****************************************************************************/
-sal_Bool ResData::SetId( const ByteString &rId, sal_uInt16 nLevel )
-/*****************************************************************************/
-{
- if ( nLevel > nIdLevel )
- {
- nIdLevel = nLevel;
- sId = rId;
-
- if ( bChild && bChildWithText )
- {
- rtl::OString sError(RTL_CONSTASCII_STRINGPARAM("ResId after child definition"));
- yyerror(sError.getStr());
- SetError();
- }
-
- if ( sId.Len() > 255 ) {
- ByteString sWarning( "LocalId > 255 chars, truncating..." );
- YYWarning( sWarning.GetBufferAccess());
- sWarning.ReleaseBufferAccess();
- sId.Erase( 255 );
- sId.EraseTrailingChars( ' ' );
- sId.EraseTrailingChars( '\t' );
- }
-
- return sal_True;
- }
-
- return sal_False;
-}
-
-//
-// class Export
-//
-
-/*****************************************************************************/
-Export::Export( const ByteString &rOutput, sal_Bool bWrite,
- const ByteString &rPrj, const ByteString &rPrjRoot , const ByteString& rFile )
-/*****************************************************************************/
- :
- pWordTransformer( NULL ),
- aCharSet( RTL_TEXTENCODING_MS_1252 ),
- bDefine( sal_False ),
- bNextMustBeDefineEOL( sal_False ),
- nLevel( 0 ),
- nList( LIST_NON ),
- nListIndex( 0 ),
- nListLevel( 0 ),
- bSkipFile( false ),
- sProject( sPrj ),
- sRoot( sPrjRoot ),
- bEnableExport( bWrite ),
- bMergeMode( bUnmerge ),
- bError( sal_False ),
- bReadOver( sal_False ),
- bDontWriteOutput( sal_False ),
- sFilename( rFile )
-{
- pParseQueue = new ParserQueue( *this );
- (void) rPrj;
- (void) rPrjRoot;
- (void) rFile;
-
- if( !isInitialized ) InitLanguages();
- // used when export is enabled
-
- // open output stream
- if ( bEnableExport ) {
- aOutput.Open( String( rOutput, RTL_TEXTENCODING_ASCII_US ), STREAM_STD_WRITE | STREAM_TRUNC );
- if( !aOutput.IsOpen() ) {
- printf("ERROR : Can't open file %s\n",rOutput.GetBuffer());
- exit ( -1 );
- }
- aOutput.SetStreamCharSet( RTL_TEXTENCODING_UTF8 );
-
- aOutput.SetLineDelimiter( LINEEND_CRLF );
- }
-}
-
-/*****************************************************************************/
-Export::Export( const ByteString &rOutput, sal_Bool bWrite,
- const ByteString &rPrj, const ByteString &rPrjRoot,
- const ByteString &rMergeSource , const ByteString& rFile )
-/*****************************************************************************/
- :
- pWordTransformer( NULL ),
- aCharSet( RTL_TEXTENCODING_MS_1252 ),
- bDefine( sal_False ),
- bNextMustBeDefineEOL( sal_False ),
- nLevel( 0 ),
- nList( LIST_NON ),
- nListIndex( 0 ),
- nListLevel( 0 ),
- bSkipFile( false ),
- sProject( sPrj ),
- sRoot( sPrjRoot ),
- bEnableExport( bWrite ),
- bMergeMode( sal_True ),
- sMergeSrc( rMergeSource ),
- bError( sal_False ),
- bReadOver( sal_False ),
- bDontWriteOutput( sal_False ),
- sFilename( rFile )
-{
- (void) rPrj;
- (void) rPrjRoot;
- (void) rFile;
- pParseQueue = new ParserQueue( *this );
- if( !isInitialized ) InitLanguages( bMergeMode );
- // used when merge is enabled
-
- // open output stream
- if ( bEnableExport ) {
- aOutput.Open( String( rOutput, RTL_TEXTENCODING_ASCII_US ), STREAM_STD_WRITE | STREAM_TRUNC );
- aOutput.SetStreamCharSet( RTL_TEXTENCODING_UTF8 );
- aOutput.SetLineDelimiter( LINEEND_CRLF );
- }
-
-}
-
-/*****************************************************************************/
-void Export::Init()
-/*****************************************************************************/
-{
- // resets the internal status, used before parseing another file
- sActPForm = "";
- bDefine = sal_False;
- bNextMustBeDefineEOL = sal_False;
- nLevel = 0;
- nList = LIST_NON;
- m_sListLang = ByteString( String::CreateFromAscii(""),RTL_TEXTENCODING_ASCII_US );
- nListIndex = 0;
- for ( size_t i = 0, n = aResStack.size(); i < n; ++i )
- delete aResStack[ i ];
- aResStack.clear();
-}
-
-/*****************************************************************************/
-Export::~Export()
-/*****************************************************************************/
-{
- if( pParseQueue )
- delete pParseQueue;
- // close output stream
- if ( bEnableExport )
- aOutput.Close();
- for ( size_t i = 0, n = aResStack.size(); i < n; ++i )
- delete aResStack[ i ];
- aResStack.clear();
-
- if ( bMergeMode && !bUnmerge ) {
- if ( !pMergeDataFile )
- pMergeDataFile = new MergeDataFile( sMergeSrc,sFile , bErrorLog, aCharSet);//, bUTF8 );
-
- delete pMergeDataFile;
- }
-}
-
-/*****************************************************************************/
-int Export::Execute( int nToken, const char * pToken )
-/*****************************************************************************/
-{
-
- ByteString sToken( pToken );
- ByteString sOrig( sToken );
- sal_Bool bWriteToMerged = bMergeMode;
-
- if ( nToken == CONDITION ) {
- ByteString sTestToken( pToken );
- sTestToken.EraseAllChars( '\t' );
- sTestToken.EraseAllChars( ' ' );
- if (( !bReadOver ) && ( sTestToken.Search( "#ifndef__RSC_PARSER" ) == 0 ))
- bReadOver = sal_True;
- else if (( bReadOver ) && ( sTestToken.Search( "#endif" ) == 0 ))
- bReadOver = sal_False;
- }
- if ((( nToken < FILTER_LEVEL ) || ( bReadOver )) &&
- (!(( bNextMustBeDefineEOL ) && ( sOrig == "\n" )))) {
- // this tokens are not mandatory for parsing, so ignore them ...
- if ( bMergeMode )
- WriteToMerged( sOrig , false ); // ... ore whrite them directly to dest.
- return 0;
- }
-
- ResData *pResData = NULL;
- if ( nLevel ) {
- // res. exists at cur. level
- pResData = ( (nLevel-1) < aResStack.size() ) ? aResStack[ nLevel-1 ] : NULL;
- }
- else if (( nToken != RESSOURCE ) &&
- ( nToken != RESSOURCEEXPR ) &&
- ( nToken != SMALRESSOURCE ) &&
- ( nToken != LEVELUP ) &&
- ( nToken != NORMDEFINE ) &&
- ( nToken != RSCDEFINE ) &&
- ( nToken != CONDITION ) &&
- ( nToken != PRAGMA ))
- {
- // no res. exists at cur. level so return
- if ( bMergeMode )
- WriteToMerged( sOrig , false );
- return 0;
- }
- // #define NO_LOCALIZE_EXPORT
- if( bSkipFile ){
- if ( bMergeMode ) {
- WriteToMerged( sOrig , false );
- }
- return 1;
- }
-
-
- if ( bDefine ) {
- if (( nToken != EMPTYLINE ) && ( nToken != LEVELDOWN ) && ( nToken != LEVELUP )) {
- // cur. res. defined in macro
- if ( bNextMustBeDefineEOL ) {
- if ( nToken != RSCDEFINELEND ) {
- // end of macro found, so destroy res.
- bDefine = sal_False;
- if ( bMergeMode ) {
- MergeRest( pResData );
- }
- bNextMustBeDefineEOL = sal_False;
- Execute( LEVELDOWN, "" );
- }
- else {
- // next line also in macro definition
- bNextMustBeDefineEOL = sal_False;
- if ( bMergeMode )
- WriteToMerged( sOrig , false );
- return 1;
- }
- }
- else if (( nToken != LISTASSIGNMENT ) && ( nToken != UIENTRIES )){
- // cur. line has macro line end
- ByteString sTmpLine( sToken );
- sTmpLine.EraseAllChars( '\t' ); sTmpLine.EraseAllChars( ' ' );
- }
- }
- }
-
- sal_Bool bExecuteDown = sal_False;
- if ( nToken != LEVELDOWN ) {
- sal_uInt16 nOpen = 0;
- sal_uInt16 nClose = 0;
- sal_Bool bReadOver1 = sal_False;
- sal_uInt16 i = 0;
- for ( i = 0; i < sToken.Len(); i++ ) {
- if ( sToken.GetChar( i ) == '\"' )
- bReadOver1 = !bReadOver1;
- if ( !bReadOver1 && ( sToken.GetChar( i ) == '{' ))
- nOpen++;
- }
-
- bReadOver1 = sal_False;
- for ( i = 0; i < sToken.Len(); i++ ) {
- if ( sToken.GetChar( i ) == '\"' )
- bReadOver1 = !bReadOver1;
- if ( !bReadOver1 && ( sToken.GetChar( i ) == '}' ))
- nClose++;
- }
-
- if ( nOpen < nClose )
- bExecuteDown = sal_True;
- }
- switch ( nToken ) {
-
- case NORMDEFINE:
- while( sToken.SearchAndReplace( "\r", " " ) != STRING_NOTFOUND ) {};
- while( sToken.SearchAndReplace( "\t", " " ) != STRING_NOTFOUND ) {};
- while( sToken.SearchAndReplace( " ", " " ) != STRING_NOTFOUND ) {};
- if( sToken.EqualsIgnoreCaseAscii( "#define NO_LOCALIZE_EXPORT" ) ){
- bSkipFile = true;
- return 0;
- }
- if ( bMergeMode )
- WriteToMerged( sOrig , false );
-
- return 0;
-
-
- case RSCDEFINE:
- bDefine = sal_True; // res. defined in macro
-
- case RESSOURCE:
- case RESSOURCEEXPR: {
- bDontWriteOutput = sal_False;
- if ( nToken != RSCDEFINE )
- bNextMustBeDefineEOL = sal_False;
- // this is the beginning of a new res.
- nLevel++;
- if ( nLevel > 1 ) {
- aResStack[ nLevel - 2 ]->bChild = sal_True;
- }
-
- // create new instance for this res. and fill mandatory fields
-
- pResData = new ResData( sActPForm, FullId() , sFilename );
- aResStack.push_back( pResData );
- ByteString sBackup( sToken );
- sToken.EraseAllChars( '\n' );
- sToken.EraseAllChars( '\r' );
- sToken.EraseAllChars( '{' );
- while( sToken.SearchAndReplace( "\t", " " ) != STRING_NOTFOUND ) {};
- sToken.EraseTrailingChars( ' ' );
- ByteString sT = sToken.GetToken( 0, ' ' );
- pResData->sResTyp = sT.ToLowerAscii();
- ByteString sId( sToken.Copy( pResData->sResTyp.Len() + 1 ));
- ByteString sCondition;
- if ( sId.Search( "#" ) != STRING_NOTFOUND ) {
- // between ResTyp, Id and paranthes is a precomp. condition
- sCondition = "#";
- sCondition += sId.GetToken( 1, '#' );
- sId = sId.GetToken( 0, '#' );
- }
- sId = sId.GetToken( 0, '/' );
- CleanValue( sId );
- sId = sId.EraseAllChars( '\t' );
- pResData->SetId( sId, ID_LEVEL_IDENTIFIER );
- if ( sCondition.Len()) {
- ByteString sEmpty( "" );
- Execute( CONDITION, sEmpty.GetBufferAccess()); // execute the
- // precomp.
- // condition
- sEmpty.ReleaseBufferAccess();
- }
- }
- break;
- case SMALRESSOURCE: {
- bDontWriteOutput = sal_False;
- // this is the beginning of a new res.
- bNextMustBeDefineEOL = sal_False;
- nLevel++;
- if ( nLevel > 1 ) {
- aResStack[ nLevel - 2 ]->bChild = sal_True;
- }
-
- // create new instance for this res. and fill mandatory fields
-
- pResData = new ResData( sActPForm, FullId() , sFilename );
- aResStack.push_back( pResData );
- sToken.EraseAllChars( '\n' );
- sToken.EraseAllChars( '\r' );
- sToken.EraseAllChars( '{' );
- sToken.EraseAllChars( '\t' );
- sToken.EraseAllChars( ' ' );
- sToken.EraseAllChars( '\\' );
- pResData->sResTyp = sToken.ToLowerAscii();
- }
- break;
- case LEVELUP: {
- // push
- if ( nList )
- nListLevel++;
- if ( nList )
- break;
-
- bDontWriteOutput = sal_False;
- ByteString sLowerTyp;
- if ( pResData )
- sLowerTyp = "unknown";
- nLevel++;
- if ( nLevel > 1 ) {
- aResStack[ nLevel - 2 ]->bChild = sal_True;
- }
-
- ResData *pNewData = new ResData( sActPForm, FullId() , sFilename );
- pNewData->sResTyp = sLowerTyp;
- aResStack.push_back( pNewData );
- }
- break;
- case LEVELDOWN: {
- // pop
- if ( !nList ) {
- bDontWriteOutput = sal_False;
- if ( nLevel ) {
- if ( bDefine && (nLevel == 1 )) {
- bDefine = sal_False;
- bNextMustBeDefineEOL = sal_False;
- }
- WriteData( pResData );
- ResStack::iterator it = aResStack.begin();
- ::std::advance( it, nLevel-1 );
- delete *it;
- aResStack.erase( it );
- nLevel--;
- }
- }
- else {
- if ( bDefine )
- bNextMustBeDefineEOL = sal_True;
- if ( !nListLevel ) {
- if ( bMergeMode )
- MergeRest( pResData, MERGE_MODE_LIST );
- nList = LIST_NON;
- }
- else
- nListLevel--;
- }
- }
- break;
- case ASSIGNMENT: {
- bDontWriteOutput = sal_False;
- // interpret different types of assignement
- ByteString sKey = sToken.GetToken( 0, '=' );
- sKey.EraseAllChars( ' ' );
- sKey.EraseAllChars( '\t' );
- ByteString sValue = sToken.GetToken( 1, '=' );
- CleanValue( sValue );
- if ( sKey.ToUpperAscii() == "IDENTIFIER" ) {
- ByteString sId( sValue.EraseAllChars( '\t' ));
- pResData->SetId( sId.EraseAllChars( ' ' ), ID_LEVEL_IDENTIFIER );
- }
- else if ( sKey == "HELPID" ) {
- pResData->sHelpId = sValue;
- }
- else if ( sKey == "STRINGLIST" ) {
- pResData->bList = sal_True;
- nList = LIST_STRING;
- m_sListLang = SOURCE_LANGUAGE;
- nListIndex = 0;
- nListLevel = 0;
- }
- else if ( sKey == "FILTERLIST" ) {
- pResData->bList = sal_True;
- nList = LIST_FILTER;
- m_sListLang = SOURCE_LANGUAGE;
- nListIndex = 0;
- nListLevel = 0;
- }
- else if ( sKey == "UIENTRIES" ) {
- pResData->bList = sal_True;
- nList = LIST_UIENTRIES;
- m_sListLang = SOURCE_LANGUAGE;
- nListIndex = 0;
- nListLevel = 0;
- }
- if (( sToken.Search( "{" ) != STRING_NOTFOUND ) &&
- ( sToken.GetTokenCount( '{' ) > sToken.GetTokenCount( '}' )))
- {
- Parse( LEVELUP, "" );
- }
- }
- break;
- case UIENTRIES:
- case LISTASSIGNMENT: {
- bDontWriteOutput = sal_False;
- ByteString sTmpToken( sToken);
- sTmpToken.EraseAllChars(' ');
- sal_uInt16 nPos = 0;
- nPos = sTmpToken.ToLowerAscii().Search("[en-us]=");
- if( nPos != STRING_NOTFOUND ) {
- ByteString sKey = sTmpToken.Copy( 0 , nPos );
- sKey.EraseAllChars( ' ' );
- sKey.EraseAllChars( '\t' );
- ByteString sValue = sToken.GetToken( 1, '=' );
- CleanValue( sValue );
- if ( sKey.ToUpperAscii() == "STRINGLIST" ) {
- pResData->bList = sal_True;
- nList = LIST_STRING;
- m_sListLang = SOURCE_LANGUAGE;
- nListIndex = 0;
- nListLevel = 0;
- }
- else if ( sKey == "FILTERLIST" ) {
- pResData->bList = sal_True;
- nList = LIST_FILTER;
- m_sListLang = SOURCE_LANGUAGE;
- nListIndex = 0;
- nListLevel = 0;
- }
- // PairedList
- else if ( sKey == "PAIREDLIST" ) {
- pResData->bList = sal_True;
- nList = LIST_PAIRED;
- m_sListLang = SOURCE_LANGUAGE;
- nListIndex = 0;
- nListLevel = 0;
- }
-
- else if ( sKey == "ITEMLIST" ) {
- pResData->bList = sal_True;
- nList = LIST_ITEM;
- m_sListLang = SOURCE_LANGUAGE;
- nListIndex = 0;
- nListLevel = 0;
- }
- else if ( sKey == "UIENTRIES" ) {
- pResData->bList = sal_True;
- nList = LIST_UIENTRIES;
- m_sListLang = SOURCE_LANGUAGE;
- nListIndex = 0;
- nListLevel = 0;
- }
- }
- else {
- // new res. is a String- or FilterList
- ByteString sKey = sToken.GetToken( 0, '[' );
- sKey.EraseAllChars( ' ' );
- sKey.EraseAllChars( '\t' );
- if ( sKey.ToUpperAscii() == "STRINGLIST" )
- nList = LIST_STRING;
- else if ( sKey == "FILTERLIST" )
- nList = LIST_FILTER;
- else if ( sKey == "PAIREDLIST" )
- nList = LIST_PAIRED; // abcd
- else if ( sKey == "ITEMLIST" )
- nList = LIST_ITEM;
- else if ( sKey == "UIENTRIES" )
- nList = LIST_UIENTRIES;
- if ( nList ) {
- ByteString sLang=sToken.GetToken( 1, '[' ).GetToken( 0, ']' );
- CleanValue( sLang );
- m_sListLang = sLang;
- nListIndex = 0;
- nListLevel = 0;
- }
- }
- }
- break;
- case TEXT:
- case _LISTTEXT:
- case LISTTEXT: {
- // this is an entry for a String- or FilterList
- if ( nList ) {
- SetChildWithText();
- ByteString sEntry( sToken.GetToken( 1, '\"' ));
- if ( sToken.GetTokenCount( '\"' ) > 3 )
- sEntry += "\"";
- if ( sEntry == "\\\"" )
- sEntry = "\"";
- InsertListEntry( sEntry, sOrig );
- if ( bMergeMode && ( sEntry != "\"" ))
- {
- PrepareTextToMerge( sOrig, nList, m_sListLang, pResData );
- }
- }
- }
- break;
- case LONGTEXTLINE:
- case TEXTLINE:
- bDontWriteOutput = sal_False;
- if ( nLevel ) {
- CutComment( sToken );
-
- // this is a text line!!!
- ByteString sKey = sToken.GetToken( 0, '=' ).GetToken( 0, '[' );
- sKey.EraseAllChars( ' ' );
- sKey.EraseAllChars( '\t' );
- ByteString sText( GetText( sToken, nToken ));
- if ( !bMergeMode )
- sText = sText.Convert( aCharSet, RTL_TEXTENCODING_MS_1252 );
- ByteString sLang;
- if ( sToken.GetToken( 0, '=' ).Search( "[" ) != STRING_NOTFOUND ) {
- sLang = sToken.GetToken( 0, '=' ).GetToken( 1, '[' ).GetToken( 0, ']' );
- CleanValue( sLang );
- }
- rtl::OString sLangIndex = sLang;
- ByteString sOrigKey = sKey;
- if ( sText.Len() && sLang.Len() ) {
- if (( sKey.ToUpperAscii() == "TEXT" ) ||
- ( sKey == "MESSAGE" ) ||
- ( sKey == "CUSTOMUNITTEXT" ) ||
- ( sKey == "SLOTNAME" ) ||
- ( sKey == "UINAME" ))
- {
- SetChildWithText();
- if ( Export::isSourceLanguage( sLangIndex ) )
- pResData->SetId( sText, ID_LEVEL_TEXT );
-
- pResData->bText = sal_True;
- pResData->sTextTyp = sOrigKey;
- if ( bMergeMode ) {
- PrepareTextToMerge( sOrig, STRING_TYP_TEXT, sLangIndex, pResData );
- }
- else
- {
- if (pResData->sText[ sLangIndex ].getLength())
- {
- rtl::OStringBuffer sError(RTL_CONSTASCII_STRINGPARAM("Language "));
- sError.append(sLangIndex);
- sError.append(RTL_CONSTASCII_STRINGPARAM("defined twice"));
- yyerror(sError.getStr());
- }
- pResData->sText[ sLangIndex ] = sText;
- }
- }
- else if ( sKey == "HELPTEXT" ) {
- SetChildWithText();
- pResData->bHelpText = sal_True;
- if ( bBreakWhenHelpText )
- {
- rtl::OString sError(
- RTL_CONSTASCII_STRINGPARAM("\"HelpText\" found in source\n"));
- YYWarning(sError.getStr());
- SetError();
- }
- if ( bMergeMode )
- PrepareTextToMerge( sOrig, STRING_TYP_HELPTEXT, sLangIndex, pResData );
- else
- {
- if (pResData->sHelpText[ sLangIndex ].getLength())
- {
- rtl::OStringBuffer sError(RTL_CONSTASCII_STRINGPARAM("Language "));
- sError.append(sLangIndex);
- sError.append(" defined twice");
- YYWarning(sError.getStr());
- }
- pResData->sHelpText[ sLangIndex ] = sText;
- }
- }
- else if ( sKey == "QUICKHELPTEXT" ) {
- SetChildWithText();
- pResData->bQuickHelpText = sal_True;
- if ( bMergeMode )
- PrepareTextToMerge( sOrig, STRING_TYP_QUICKHELPTEXT, sLangIndex, pResData );
- else
- {
- if (pResData->sQuickHelpText[ sLangIndex ].getLength())
- {
- rtl::OStringBuffer sError(RTL_CONSTASCII_STRINGPARAM("Language "));
- sError.append(sLangIndex);
- sError.append(RTL_CONSTASCII_STRINGPARAM(" defined twice"));
- YYWarning(sError.getStr());
- }
- pResData->sQuickHelpText[ sLangIndex ] = sText;
- }
- }
- else if ( sKey == "TITLE" ) {
- SetChildWithText();
- pResData->bTitle = sal_True;
- if ( bMergeMode )
- PrepareTextToMerge( sOrig, STRING_TYP_TITLE, sLangIndex, pResData );
- else
- {
- if ( pResData->sTitle[ sLangIndex ].getLength())
- {
- rtl::OStringBuffer sError(RTL_CONSTASCII_STRINGPARAM("Language "));
- sError.append(sLangIndex);
- sError.append(RTL_CONSTASCII_STRINGPARAM(" defined twice"));
- YYWarning(sError.getStr());
- }
- pResData->sTitle[ sLangIndex ] = sText;
- }
- }
- else if ( sKey == "ACCESSPATH" ) {
- pResData->SetId( sText, ID_LEVEL_ACCESSPATH );
- }
- else if ( sKey == "FIELDNAME" ) {
- pResData->SetId( sText, ID_LEVEL_FIELDNAME );
- }
- }
- }
- break;
- case NEWTEXTINRES: {
- bDontWriteOutput = sal_True;
- }
- break;
- case APPFONTMAPPING: {
- bDontWriteOutput = sal_False;
- // this is a AppfontMapping, so look if its a definition
- // of field size
- ByteString sKey = sToken.GetToken( 0, '=' );
- sKey.EraseAllChars( ' ' );
- sKey.EraseAllChars( '\t' );
- ByteString sMapping = sToken.GetToken( 1, '=' );
- sMapping = sMapping.GetToken( 1, '(' );
- sMapping = sMapping.GetToken( 0, ')' );
- sMapping.EraseAllChars( ' ' );
- sMapping.EraseAllChars( '\t' );
- if ( sKey.ToUpperAscii() == "SIZE" ) {
- pResData->nWidth = ( sal_uInt16 ) sMapping.GetToken( 0, ',' ).ToInt64();
- }
- else if ( sKey == "POSSIZE" ) {
- pResData->nWidth = ( sal_uInt16 ) sMapping.GetToken( 2, ',' ).ToInt64();
- }
- }
- break;
- case RSCDEFINELEND:
- bDontWriteOutput = sal_False;
- break;
- case CONDITION: {
- bDontWriteOutput = sal_False;
- while( sToken.SearchAndReplace( "\r", " " ) != STRING_NOTFOUND ) {};
- while( sToken.SearchAndReplace( "\t", " " ) != STRING_NOTFOUND ) {};
- while( sToken.SearchAndReplace( " ", " " ) != STRING_NOTFOUND ) {};
- ByteString sCondition = sToken.GetToken( 0, ' ' );
- if ( sCondition == "#ifndef" ) {
- sActPForm = "!defined ";
- sActPForm += sToken.GetToken( 1, ' ' );
- }
- else if ( sCondition == "#ifdef" ) {
- sActPForm = "defined ";
- sActPForm += sToken.GetToken( 1, ' ' );
- }
- else if ( sCondition == "#if" ) {
- sActPForm = sToken.Copy( 4 );
- while ( sActPForm.SearchAndReplace( "||", "\\or" ) != STRING_NOTFOUND ) {};
- }
- else if ( sCondition == "#elif" ) {
- sActPForm = sToken.Copy( 6 );
- while ( sActPForm.SearchAndReplace( "||", "\\or" ) != STRING_NOTFOUND ) {};
- }
- else if ( sCondition == "#else" ) {
- sActPForm = sCondition;
- }
- else if ( sCondition == "#endif" ) {
- sActPForm = "";
- }
- else break;
- if ( nLevel ) {
- WriteData( pResData, sal_True );
- pResData->sPForm = sActPForm;
- }
- }
- break;
- case EMPTYLINE : {
- bDontWriteOutput = sal_False;
- if ( bDefine ) {
- bNextMustBeDefineEOL = sal_False;
- bDefine = sal_False;
- while ( nLevel )
- Parse( LEVELDOWN, "" );
- }
- }
- break;
- case PRAGMA : {
- bDontWriteOutput = sal_False;
- while( sToken.SearchAndReplace( "\t", " " ) != STRING_NOTFOUND ) {};
- while( sToken.SearchAndReplace( " ", " " ) != STRING_NOTFOUND ) {};
- sToken.EraseLeadingChars( ' ' );
- sToken.EraseTrailingChars( ' ' );
-
- ByteString sCharset = sToken.GetToken( 1, ' ' );
- ByteString sSet = sToken.GetToken( 2, ' ' );
- if (( sCharset.ToUpperAscii() == "CHARSET_IBMPC" ) ||
- ( sCharset == "RTL_TEXTENCODING_IBM_850" ) ||
- (( sCharset == "CHARSET" ) && ( sSet.ToUpperAscii() == "IBMPC" )))
- {
- aCharSet = RTL_TEXTENCODING_IBM_850;
- }
- else if (( sCharset == "CHARSET_ANSI" ) ||
- ( sCharset == "RTL_TEXTENCODING_MS_1252" ) ||
- (( sCharset == "CHARSET" ) && ( sSet.ToUpperAscii() == "ANSI" )))
- {
- aCharSet = RTL_TEXTENCODING_MS_1252;
- }
- }
- break;
- case TEXTREFID : {
- bDontWriteOutput = sal_True;
- }
- }
- if ( bWriteToMerged ) {
- // the current token must be written to dest. without merging
-
- if( bDefine && sOrig.Len() > 2 ){
- for( sal_uInt16 n = 0 ; n < sOrig.Len() ; n++ ){
- if( sOrig.GetChar( n ) == '\n' && sOrig.GetChar( n-1 ) != '\\'){
- sOrig.Insert('\\' , n++ );
- }
- }
- }
- WriteToMerged( sOrig , false);
- }
-
- if ( bExecuteDown ) {
- Parse( LEVELDOWN, "" );
- }
-
- return 1;
-}
-
-/*****************************************************************************/
-void Export::CutComment( ByteString &rText )
-/*****************************************************************************/
-{
- if ( rText.Search( "//" ) != STRING_NOTFOUND ) {
- ByteString sWork( rText );
- sWork.SearchAndReplaceAll( "\\\"", "XX" );
- sal_uInt16 i = 0;
- sal_Bool bInner = sal_False;
-
- while ( i < sWork.Len() - 1 ) {
- if ( sWork.GetChar( i ) == '\"' )
- bInner = !bInner;
- else if
- (( sWork.GetChar( i ) == '/' ) &&
- ( !bInner ) &&
- ( sWork.GetChar( i + 1 ) == '/' ))
- {
- rText.Erase( i );
- return;
- }
- i++;
- }
- }
-}
-
-/*****************************************************************************/
-sal_Bool Export::WriteData( ResData *pResData, sal_Bool bCreateNew )
-/*****************************************************************************/
-{
- if ( bMergeMode ) {
- MergeRest( pResData );
- return sal_True;
- }
-
- if ( bUnmerge )
- return sal_True;
-
- // mandatory to export: en-US
-
- if (( pResData->sText[ SOURCE_LANGUAGE ].getLength())
- ||
- ( pResData->sHelpText[ SOURCE_LANGUAGE ].getLength())
- ||
- ( pResData->sQuickHelpText[ SOURCE_LANGUAGE ].getLength())
- ||
- ( pResData->sTitle[ SOURCE_LANGUAGE ].getLength()))
-
- {
- FillInFallbacks( pResData );
-
- ByteString sGID = pResData->sGId;
- ByteString sLID;
- if ( !sGID.Len())
- sGID = pResData->sId;
- else
- sLID = pResData->sId;
-
- ByteString sXText;
- ByteString sXHText;
- ByteString sXQHText;
- ByteString sXTitle;
-
- ByteString sTimeStamp( Export::GetTimeStamp());
- ByteString sCur;
-
- for( unsigned int n = 0; n < aLanguages.size(); n++ ){
- sCur = aLanguages[ n ];
- if ( !sCur.EqualsIgnoreCaseAscii("x-comment") ){
- if (pResData->sText[ sCur ].getLength())
- sXText = pResData->sText[ sCur ];
- else {
- sXText = pResData->sText[ SOURCE_LANGUAGE ];
- }
-
- if (pResData->sHelpText[ sCur ].getLength())
- sXHText = pResData->sHelpText[ sCur ];
- else {
- sXHText = pResData->sHelpText[ SOURCE_LANGUAGE ];
- }
-
- if (pResData->sQuickHelpText[ sCur ].getLength())
- sXQHText = pResData->sQuickHelpText[ sCur ];
- else {
- sXQHText = pResData->sQuickHelpText[ SOURCE_LANGUAGE ];
- }
-
- if (pResData->sTitle[ sCur ].getLength())
- sXTitle = pResData->sTitle[ sCur ];
- else
- sXTitle = pResData->sTitle[ SOURCE_LANGUAGE ];
-
- if ( !sXText.Len())
- sXText = "-";
-
- if ( !sXHText.Len())
- {
- if (pResData->sHelpText[ SOURCE_LANGUAGE ].getLength())
- sXHText = pResData->sHelpText[ SOURCE_LANGUAGE ];
- }
- }
- else
- sXText = pResData->sText[ sCur ];
-
- if ( bEnableExport ) {
- ByteString sOutput( sProject ); sOutput += "\t";
- if ( sRoot.Len())
- sOutput += sActFileName;
- sOutput += "\t0\t";
- sOutput += pResData->sResTyp; sOutput += "\t";
- sOutput += sGID; sOutput += "\t";
- sOutput += sLID; sOutput += "\t";
- sOutput += pResData->sHelpId; sOutput += "\t";
- sOutput += pResData->sPForm; sOutput += "\t";
- sOutput += ByteString(rtl::OString::valueOf(static_cast<sal_Int64>(pResData->nWidth))); sOutput += "\t";
- sOutput += sCur; sOutput += "\t";
-
-
- sOutput += sXText; sOutput += "\t";
- sOutput += sXHText; sOutput += "\t";
- sOutput += sXQHText; sOutput+= "\t";
- sOutput += sXTitle; sOutput += "\t";
- sOutput += sTimeStamp;
-
- aOutput.WriteLine( sOutput );
- }
-
- if ( bCreateNew ) {
- pResData->sText[ sCur ] = "";
- pResData->sHelpText[ sCur ] = "";
- pResData->sQuickHelpText[ sCur ]= "";
- pResData->sTitle[ sCur ] = "";
- }
- }
- }
- FillInFallbacks( pResData );
- if ( pResData->pStringList ) {
- ByteString sList( "stringlist" );
- WriteExportList( pResData, pResData->pStringList, sList, bCreateNew );
- if ( bCreateNew )
- pResData->pStringList = 0;
- }
- if ( pResData->pFilterList ) {
- ByteString sList( "filterlist" );
- WriteExportList( pResData, pResData->pFilterList, sList, bCreateNew );
- if ( bCreateNew )
- pResData->pFilterList = 0;
- }
- if ( pResData->pItemList ) {
- ByteString sList( "itemlist" );
- WriteExportList( pResData, pResData->pItemList, sList, bCreateNew );
- if ( bCreateNew )
- pResData->pItemList = 0;
- }
- if ( pResData->pPairedList ) {
- ByteString sList( "pairedlist" );
- WriteExportList( pResData, pResData->pPairedList, sList, bCreateNew );
- if ( bCreateNew )
- pResData->pItemList = 0;
- }
- if ( pResData->pUIEntries ) {
- ByteString sList( "uientries" );
- WriteExportList( pResData, pResData->pUIEntries, sList, bCreateNew );
- if ( bCreateNew )
- pResData->pUIEntries = 0;
- }
- return sal_True;
-}
-ByteString Export::GetPairedListID( const ByteString& sText ){
-// < "STRING" ; IDENTIFIER ; > ;
- ByteString sIdent = sText.GetToken( 1, ';' );
- sIdent.ToUpperAscii();
- while( sIdent.SearchAndReplace( "\t", " " ) != STRING_NOTFOUND ) {};
- sIdent.EraseTrailingChars( ' ' );
- sIdent.EraseLeadingChars( ' ' );
- return sIdent;
-}
-ByteString Export::GetPairedListString( const ByteString& sText ){
-// < "STRING" ; IDENTIFIER ; > ;
- ByteString sString = sText.GetToken( 0, ';' );
- while( sString.SearchAndReplace( "\t", " " ) != STRING_NOTFOUND ) {};
- sString.EraseTrailingChars( ' ' );
- ByteString s1 = sString.Copy( sString.Search( '\"' )+1 );
- sString = s1.Copy( 0 , s1.SearchBackward( '\"' ) );
- sString.EraseTrailingChars( ' ' );
- sString.EraseLeadingChars( ' ' );
- return sString;
-}
-ByteString Export::StripList( const ByteString& sText ){
- ByteString s1 = sText.Copy( sText.Search( '\"' ) + 1 );
- return s1.Copy( 0 , s1.SearchBackward( '\"' ) );
-}
-
-/*****************************************************************************/
-sal_Bool Export::WriteExportList( ResData *pResData, ExportList *pExportList,
- const ByteString &rTyp, sal_Bool bCreateNew )
-/*****************************************************************************/
-{
- ByteString sGID = pResData->sGId;
- if ( !sGID.Len())
- sGID = pResData->sId;
- else {
- sGID += ".";
- sGID += pResData->sId;
- sGID.EraseTrailingChars( '.' );
- }
-
- ByteString sTimeStamp( Export::GetTimeStamp());
- ByteString sCur;
- for ( size_t i = 0; pExportList != NULL && i < pExportList->size(); i++ ) {
- ExportListEntry *pEntry = (*pExportList)[ i ];
- // mandatory for export: german and eng. and/or enus
- // ByteString a("Export::WriteExportList::pEntry");
- // Export::DumpMap( a, *pEntry );
-
- ByteString sLID(rtl::OString::valueOf(static_cast<sal_Int64>(i + 1)));
- for (unsigned int n = 0; n < aLanguages.size(); ++n)
- {
- sCur = aLanguages[ n ];
- if ((*pEntry)[ SOURCE_LANGUAGE ].getLength())
- {
- if ( bEnableExport )
- {
- ByteString sText((*pEntry)[ SOURCE_LANGUAGE ] );
-
- // Strip PairList Line String
- if( rTyp.EqualsIgnoreCaseAscii("pairedlist") )
- {
- sLID = GetPairedListID( sText );
- if ((*pEntry)[ sCur ].getLength())
- sText = (*pEntry)[ sCur ];
- sText = GetPairedListString( sText );
- }
- else
- {
- sText = StripList( (*pEntry)[ sCur ] );
- if( sText == "\\\"" )
- sText = "\"";
- }
-
- ByteString sOutput( sProject ); sOutput += "\t";
- if ( sRoot.Len())
- sOutput += sActFileName;
- sOutput += "\t0\t";
- sOutput += rTyp; sOutput += "\t";
- sOutput += sGID; sOutput += "\t";
- sOutput += sLID; sOutput += "\t\t";
- sOutput += pResData->sPForm; sOutput += "\t0\t";
- sOutput += sCur; sOutput += "\t";
-
- sOutput += sText; sOutput += "\t\t\t\t";
- sOutput += sTimeStamp;
-
- aOutput.WriteLine( sOutput );
-
- }
- }
- }
- if ( bCreateNew )
- delete [] pEntry;
- }
- if ( bCreateNew )
- delete pExportList;
-
- return sal_True;
-}
-
-/*****************************************************************************/
-ByteString Export::FullId()
-/*****************************************************************************/
-{
- ByteString sFull;
- if ( nLevel > 1 ) {
- sFull = aResStack[ 0 ]->sId;
- for ( size_t i = 1; i < nLevel - 1; i++ ) {
- ByteString sToAdd = aResStack[ i ]->sId;
- if ( sToAdd.Len()) {
- sFull += ".";
- sFull += sToAdd;
- }
- }
- }
- if ( sFull.Len() > 255 )
- {
- rtl::OString sError(RTL_CONSTASCII_STRINGPARAM("GroupId > 255 chars"));
- printf("GroupID = %s\n", sFull.GetBuffer());
- yyerror(sError.getStr());
- }
-
- return sFull;
-}
-
-/*****************************************************************************/
-void Export::InsertListEntry( const ByteString &rText, const ByteString &rLine )
-/*****************************************************************************/
-{
- ResData *pResData = ( nLevel-1 < aResStack.size() ) ? aResStack[ nLevel-1 ] : NULL;
-
- ExportList *pList = NULL;
- if ( nList == LIST_STRING ) {
- pList = pResData->pStringList;
- if ( !pList ) {
- pResData->pStringList = new ExportList();
- pList = pResData->pStringList;
- nListIndex = 0;
- }
- }
- else if ( nList == LIST_FILTER ) {
- pList = pResData->pFilterList;
- if ( !pList ) {
- pResData->pFilterList = new ExportList();
- pList = pResData->pFilterList;
- nListIndex = 0;
- }
- }
- else if ( nList == LIST_ITEM ) {
- pList = pResData->pItemList;
- if ( !pList ) {
- pResData->pItemList = new ExportList();
- pList = pResData->pItemList;
- nListIndex = 0;
- }
- }
- else if ( nList == LIST_PAIRED ) {
- pList = pResData->pPairedList;
- if ( !pList ) {
- pResData->pPairedList = new ExportList();
- pList = pResData->pPairedList;
- nListIndex = 0;
- }
- }
- else if ( nList == LIST_UIENTRIES ) {
- pList = pResData->pUIEntries;
- if ( !pList ) {
- pResData->pUIEntries = new ExportList();
- pList = pResData->pUIEntries;
- nListIndex = 0;
- }
- }
- else
- return;
-
- if ( nListIndex + 1 > pList->size())
- {
- ExportListEntry *pNew = new ExportListEntry();
- (*pNew)[LIST_REFID] = rtl::OString::valueOf(static_cast<sal_Int32>(REFID_NONE));
- pList->push_back(pNew);
- }
- ExportListEntry *pCurEntry = (*pList)[ nListIndex ];
-
- // For paired list use the line to set proper lid
- if( nList == LIST_PAIRED ){
- (*pCurEntry)[ m_sListLang ] = rLine;
- }else
- (*pCurEntry)[ m_sListLang ] = rText;
-
- // Remember en-US fallback string, so each list has the same amount of elements
- if ( Export::isSourceLanguage( m_sListLang ) ) {
- if( nList == LIST_PAIRED ){
- const ByteString sPlist("pairedlist");
- ByteString sKey = MergeDataFile::CreateKey( sPlist , pResData->sId , GetPairedListID( rLine ) , sFilename );
- pResData->addFallbackData( sKey , rText );
- }
- // new fallback
- else{
- const ByteString sPlist("list");
- ByteString a( pResData->sGId );
- a.Append( "." );
- a.Append( pResData->sId );
- sal_Int64 x = nListIndex+1;
- ByteString b(rtl::OString::valueOf(x));
- ByteString sKey = MergeDataFile::CreateKey( sPlist , a , b , sFilename );
- pResData->addFallbackData( sKey , rText );
- }
- // new fallback
- }
-
- if ( Export::isSourceLanguage( m_sListLang ) ) {
- if( nList == LIST_PAIRED ){
- (*pCurEntry)[ SOURCE_LANGUAGE ] = rLine;
- }
- else
- (*pCurEntry)[ SOURCE_LANGUAGE ] = rLine;
-
- pList->NewSourceLanguageListEntry();
- }
-
- //printf("Export::InsertListEntry ResData.id = %s ResData.ListData = %s\n",pResData->sId.GetBuffer() ,(*pCurEntry)[ m_sListLang ].GetBuffer());
- nListIndex++;
-}
-
-/*****************************************************************************/
-void Export::CleanValue( ByteString &rValue )
-/*****************************************************************************/
-{
- while ( rValue.Len()) {
- if (( rValue.GetChar( 0 ) == ' ' ) || ( rValue.GetChar( 0 ) == '\t' ))
- rValue = rValue.Copy( 1 );
- else
- break;
- }
-
- if ( rValue.Len()) {
- for ( sal_uInt16 i = rValue.Len() - 1; i > 0; i-- ) {
- if (( rValue.GetChar( i ) == ' ' ) || ( rValue.GetChar( i ) == '\t' ) ||
- ( rValue.GetChar( i ) == '\n' ) || ( rValue.GetChar( i ) == ';' ) ||
- ( rValue.GetChar( i ) == '{' ) || ( rValue.GetChar( i ) == '\\' ) ||
- ( rValue.GetChar( i ) == '\r' ))
- rValue.Erase( i );
- else
- break;
- }
- }
-}
-
-
-/*****************************************************************************/
-ByteString Export::GetText( const ByteString &rSource, int nToken )
-/*****************************************************************************/
-#define TXT_STATE_NON 0x000
-#define TXT_STATE_TEXT 0x001
-#define TXT_STATE_MACRO 0x002
-{
- ByteString sReturn;
- switch ( nToken ) {
- case TEXTLINE:
- case LONGTEXTLINE: {
- ByteString sTmp( rSource.Copy( rSource.Search( "=" )));
- CleanValue( sTmp );
- sTmp.EraseAllChars( '\n' );
- sTmp.EraseAllChars( '\r' );
-
- while ( sTmp.SearchAndReplace( "\\\\\"", "-=<[BSlashBSlashHKom]>=-\"" )
- != STRING_NOTFOUND ) {};
- while ( sTmp.SearchAndReplace( "\\\"", "-=<[Hochkomma]>=-" )
- != STRING_NOTFOUND ) {};
- while ( sTmp.SearchAndReplace( "\\", "-=<[0x7F]>=-" )
- != STRING_NOTFOUND ) {};
- while ( sTmp.SearchAndReplace( "\\0x7F", "-=<[0x7F]>=-" )
- != STRING_NOTFOUND ) {};
-
- sal_uInt16 nStart = 0;
- sal_uInt16 nState = TXT_STATE_MACRO;
-
- nState = TXT_STATE_TEXT;
- nStart = 1;
-
-
- for ( sal_uInt16 i = nStart; i < sTmp.GetTokenCount( '\"' ); i++ ) {
- ByteString sToken = sTmp.GetToken( i, '\"' );
- if ( sToken.Len()) {
- if ( nState == TXT_STATE_TEXT ) {
- sReturn += sToken;
- nState = TXT_STATE_MACRO;
- }
- else {
- while( sToken.SearchAndReplace( "\t", " " ) !=
- STRING_NOTFOUND ) {};
- while( sToken.SearchAndReplace( " ", " " ) !=
- STRING_NOTFOUND ) {};
- sToken.EraseLeadingChars( ' ' );
- sToken.EraseTrailingChars( ' ' );
- if ( sToken.Len()) {
- sReturn += "\\\" ";
- sReturn += sToken;
- sReturn += " \\\"";
- }
- nState = TXT_STATE_TEXT;
- }
- }
- }
-
- while ( sReturn.SearchAndReplace( "-=<[0x7F]>=-", "" )
- != STRING_NOTFOUND ) {};
- while ( sReturn.SearchAndReplace( "-=<[Hochkomma]>=-", "\"" )
- != STRING_NOTFOUND ) {};
- while ( sReturn.SearchAndReplace( "-=<[BSlashBSlashHKom]>=-", "\\\\" )
- != STRING_NOTFOUND ) {};
-
-
- while ( sReturn.SearchAndReplace( "\\\\", "-=<[BSlashBSlash]>=-" )
- != STRING_NOTFOUND ) {};
- while ( sReturn.SearchAndReplace( "-=<[BSlashBSlash]>=-", "\\" )
- != STRING_NOTFOUND ) {};
-
- }
- break;
- }
- return sReturn;
-}
-
-/*****************************************************************************/
-void Export::WriteToMerged( const ByteString &rText , bool bSDFContent )
-/*****************************************************************************/
-{
- static ByteString SLASH ('\\');
- static ByteString RETURN ('\n');
- //printf("%s\n",rText.GetBuffer() );
-
- if ( !bDontWriteOutput || !bUnmerge ) {
- ByteString sText( rText );
- while ( sText.SearchAndReplace( " \n", "\n" ) != STRING_NOTFOUND ) {};
- if( pParseQueue->bNextIsM && bSDFContent && sText.Len() > 2 ){
- for( sal_uInt16 n = 0 ; n < sText.Len() ; n++ ){
- if( sText.GetChar( n ) == '\n' && sText.GetChar( n-1 ) != '\\'){
- sText.Insert('\\' , n++ );
-
- }
- }
- }
- else if( pParseQueue->bLastWasM && sText.Len() > 2 ){
- for( sal_uInt16 n = 0 ; n < sText.Len() ; n++ ){
- if( sText.GetChar( n ) == '\n' && sText.GetChar( n-1 ) != '\\'){
- sText.Insert('\\' , n++ );
- }
- if( sText.GetChar( n ) == '\n' )pParseQueue->bMflag=true;
- }
- }
- else if( pParseQueue->bCurrentIsM && bSDFContent && sText.Len() > 2 ){
- for( sal_uInt16 n = 0 ; n < sText.Len() ; n++ ){
- if( sText.GetChar( n ) == '\n' && sText.GetChar( n-1 ) != '\\'){
- sText.Insert('\\' , n++ );
- pParseQueue->bMflag=true;
- }
- }
- }
- else if( pParseQueue->bMflag ){
- for( sal_uInt16 n = 1 ; n < sText.Len() ; n++ ){
- if( sText.GetChar( n ) == '\n' && sText.GetChar( n-1 ) != '\\'){
- sText.Insert('\\' , n++ );
- }
- }
- }
- for ( sal_uInt16 i = 0; i < sText.Len(); i++ ) {
- if ( sText.GetChar( i ) != '\n' ){
- aOutput.Write( ByteString( sText.GetChar( i )).GetBuffer(), 1 );
-
- }
- else{
- aOutput.WriteLine( ByteString());
- }
-
- }
- }
-}
-
-/*****************************************************************************/
-void Export::ConvertMergeContent( ByteString &rText )
-/*****************************************************************************/
-{
- sal_Bool bNoOpen = ( rText.Search( "\\\"" ) != 0 );
- ByteString sClose( rText.Copy( rText.Len() - 2 ));
- sal_Bool bNoClose = ( sClose != "\\\"" );
- ByteString sNew;
- for ( sal_uInt16 i = 0; i < rText.Len(); i++ ) {
- ByteString sChar( rText.GetChar( i ));
- if ( sChar == "\\" ) {
- if (( i + 1 ) < rText.Len()) {
- ByteString sNext( rText.GetChar( i + 1 ));
- if ( sNext == "\"" ) {
- sChar = "\"";
- i++;
- }
- else if ( sNext == "n" ) {
- sChar = "\\n";
- i++;
- }
- else if ( sNext == "t" ) {
- sChar = "\\t";
- i++;
- }
- else if ( sNext == "\'" ) {
- sChar = "\\\'";
- i++;
- }
- else
- sChar = "\\\\";
- }
- else {
- sChar = "\\\\";
- }
- }
- else if ( sChar == "\"" ) {
- sChar = "\\\"";
- }
- else if ( sChar == "" ) {
- sChar = "\\0x7F";
- }
- sNew += sChar;
- }
-
- rText = sNew;
-
- if ( bNoOpen ) {
- ByteString sTmp( rText );
- rText = "\"";
- rText += sTmp;
- }
- if ( bNoClose )
- rText += "\"";
-}
-
-sal_Bool Export::PrepareTextToMerge(ByteString &rText, sal_uInt16 nTyp,
- rtl::OString &rLangIndex, ResData *pResData)
-{
- // position to merge in:
- sal_uInt16 nStart = 0;
- sal_uInt16 nEnd = 0;
- ByteString sOldId = pResData->sId;
- ByteString sOldGId = pResData->sGId;
- ByteString sOldTyp = pResData->sResTyp;
-
- ByteString sOrigText( rText );
-
- switch ( nTyp ) {
- case LIST_STRING :
- case LIST_UIENTRIES :
- case LIST_FILTER :
- case LIST_PAIRED:
- case LIST_ITEM :
- {
- if ( bUnmerge )
- return sal_True;
-
- ExportList *pList = NULL;
- switch ( nTyp ) {
- case LIST_STRING : {
- pResData->sResTyp = "stringlist";
- pList = pResData->pStringList;
- }
- break;
- case LIST_UIENTRIES : {
- pResData->sResTyp = "uientries";
- pList = pResData->pUIEntries;
- }
- break;
- case LIST_FILTER : {
- pResData->sResTyp = "filterlist";
- pList = pResData->pFilterList;
- }
- break;
- case LIST_ITEM : {
- pResData->sResTyp = "itemlist";
- pList = pResData->pItemList;
- }
- break;
- case LIST_PAIRED : {
- pResData->sResTyp = "pairedlist";
- pList = pResData->pPairedList;
- }
- break;
-
- }
- if (pList)
- {
- ExportListEntry *pCurEntry = (*pList)[ nListIndex - 1 ];
- if ( pCurEntry )
- {
- rText = (*pCurEntry)[ SOURCE_LANGUAGE ];
- if( nTyp == LIST_PAIRED )
- pResData->addMergedLanguage(rLangIndex);
- }
- }
-
- nStart = rText.Search( "\"" );
- if ( nStart == STRING_NOTFOUND ) {
- rText = sOrigText;
- return sal_False;
- }
-
- sal_Bool bFound = sal_False;
- for ( nEnd = nStart + 1; nEnd < rText.Len() && !bFound; nEnd++ ) {
- if ( rText.GetChar( nEnd ) == '\"' )
- bFound = sal_True;
- }
- if ( !bFound ) {
- rText = sOrigText;
- return sal_False;
- }
-
- nEnd --;
- sLastListLine = rText;
- if (( sLastListLine.Search( ">" ) != STRING_NOTFOUND ) &&
- ( sLastListLine.Search( "<" ) == STRING_NOTFOUND ))
- {
- ByteString sTmp = sLastListLine;
- sLastListLine = "<";
- sLastListLine += sTmp;
- }
- if ( pResData->sResTyp.EqualsIgnoreCaseAscii( "pairedlist" ) ){
- pResData->sId = GetPairedListID( sLastListLine );
- }
- else pResData->sId = rtl::OString::valueOf(static_cast<sal_Int32>(nListIndex));
-
- if ( pResData->sGId.Len())
- pResData->sGId += ".";
- pResData->sGId += sOldId;
- nTyp = STRING_TYP_TEXT;
- }
- break;
- case STRING_TYP_TEXT :
- case STRING_TYP_HELPTEXT :
- case STRING_TYP_QUICKHELPTEXT :
- case STRING_TYP_TITLE :
- {
- nStart = rText.Search( "=" );
- if ( nStart == STRING_NOTFOUND ) {
- rText = sOrigText;
- return sal_False;
- }
-
- nStart++;
- sal_Bool bFound = sal_False;
- while(( nStart < rText.Len()) && !bFound ) {
- if (( rText.GetChar( nStart ) != ' ' ) && ( rText.GetChar( nStart ) != '\t' ))
- bFound = sal_True;
- else
- nStart ++;
- }
-
- // no start position found
- if ( !bFound ) {
- rText = sOrigText;
- return sal_False;
- }
-
- // position to end mergeing in
- nEnd = rText.Len() - 1;
- bFound = sal_False;
-
- while (( nEnd > nStart ) && !bFound ) {
- if (( rText.GetChar( nEnd ) != ' ' ) && ( rText.GetChar( nEnd ) != '\t' ) &&
- ( rText.GetChar( nEnd ) != '\n' ) && ( rText.GetChar( nEnd ) != ';' ) &&
- ( rText.GetChar( nEnd ) != '{' ) && ( rText.GetChar( nEnd ) != '\\' ))
- {
- bFound = sal_True;
- }
- else
- nEnd --;
- }
- }
- break;
- }
-
- // search for merge data
- if ( !pMergeDataFile ){
- pMergeDataFile = new MergeDataFile( sMergeSrc, sFile , bErrorLog, aCharSet);//, bUTF8 );
-
- // Init Languages
- ByteString sTmp = Export::sLanguages;
- if( sTmp.ToUpperAscii().Equals("ALL") )
- SetLanguages( pMergeDataFile->GetLanguages() );
- else if( !isInitialized )InitLanguages();
-
- }
-
- PFormEntrys *pEntrys = pMergeDataFile->GetPFormEntrys( pResData );
- pResData->sId = sOldId;
- pResData->sGId = sOldGId;
- pResData->sResTyp = sOldTyp;
-
- if ( !pEntrys ) {
- rText = sOrigText;
- return sal_False; // no data found
- }
-
- ByteString sContent;
- pEntrys->GetTransex3Text(sContent, nTyp, rLangIndex);
- if (!sContent.Len() && (!Export::isSourceLanguage(rLangIndex)))
- {
- rText = sOrigText;
- return sal_False; // no data found
- }
-
- if (Export::isSourceLanguage(rLangIndex))
- return sal_False;
-
- ByteString sPostFix( rText.Copy( ++nEnd ));
- rText.Erase( nStart );
-
- ConvertMergeContent( sContent );
-
-
-
- // merge new res. in text line
- rText += sContent;
- rText += sPostFix;
-
- return sal_True;
-}
-
-/*****************************************************************************/
-void Export::MergeRest( ResData *pResData, sal_uInt16 nMode )
-/*****************************************************************************/
-{
- if ( !pMergeDataFile ){
- pMergeDataFile = new MergeDataFile( sMergeSrc, sFile ,bErrorLog, aCharSet);//, bUTF8 );
-
- // Init Languages
- ByteString sTmp = Export::sLanguages;
- if( sTmp.ToUpperAscii().Equals("ALL") )
- SetLanguages( pMergeDataFile->GetLanguages() );
- else if( !isInitialized )InitLanguages();
-
- }
- switch ( nMode ) {
- case MERGE_MODE_NORMAL : {
- PFormEntrys *pEntry = pMergeDataFile->GetPFormEntrys( pResData );
-
- bool bWriteNoSlash = false;
- if ( pEntry && pResData->bText ) {
-
- sal_Bool bAddSemikolon = sal_False;
- sal_Bool bFirst = sal_True;
- ByteString sCur;
- ByteString sTmp = Export::sLanguages;
-
- for( unsigned int n = 0; n < aLanguages.size(); n++ ){
- sCur = aLanguages[ n ];
-
- ByteString sText;
- sal_Bool bText = pEntry->GetTransex3Text( sText, STRING_TYP_TEXT, sCur , sal_True );
- if ( bText && sText.Len() && sText != "-" ) {
- ByteString sOutput;
- if ( bNextMustBeDefineEOL) {
- if ( bFirst )
- sOutput += "\t\\\n";
- else
- sOutput += ";\t\\\n";
- }
- bFirst=sal_False;
- sOutput += "\t";
- sOutput += pResData->sTextTyp;
- if ( ! Export::isSourceLanguage( sCur ) ) {
- sOutput += "[ ";
- sOutput += sCur;
- sOutput += " ] ";
- }
- sOutput += "= ";
- ConvertMergeContent( sText );
- sOutput += sText;
-
- if ( bDefine && bWriteNoSlash )
- sOutput += ";\n";
-
- if ( bDefine )
- sOutput += ";\\\n";
- else if ( !bNextMustBeDefineEOL )
- sOutput += ";\n";
- else
- bAddSemikolon = sal_True;
- for ( sal_uInt16 j = 1; j < nLevel; j++ )
- sOutput += "\t";
- WriteToMerged( sOutput , true );
- }
- }
-
-
- if ( bAddSemikolon ) {
- ByteString sOutput( ";" );
- WriteToMerged( sOutput , false );
- }
- }
-
- if ( pEntry && pResData->bQuickHelpText ) {
- sal_Bool bAddSemikolon = sal_False;
- sal_Bool bFirst = sal_True;
- ByteString sCur;
-
- for( unsigned int n = 0; n < aLanguages.size(); n++ ){
- sCur = aLanguages[ n ];
-
- ByteString sText;
- sal_Bool bText = pEntry->GetTransex3Text( sText, STRING_TYP_QUICKHELPTEXT, sCur, sal_True );
- if ( bText && sText.Len() && sText != "-" ) {
- ByteString sOutput;
- if ( bNextMustBeDefineEOL) {
- if ( bFirst )
- sOutput += "\t\\\n";
- else
- sOutput += ";\t\\\n";
- }
- bFirst=sal_False;
- sOutput += "\t";
- sOutput += "QuickHelpText";
- if ( ! Export::isSourceLanguage( sCur ) ) {
- sOutput += "[ ";
- sOutput += sCur;
- sOutput += " ] ";
- }
- sOutput += "= ";
- ConvertMergeContent( sText );
- sOutput += sText;
- if ( bDefine )
- sOutput += ";\\\n";
- else if ( !bNextMustBeDefineEOL )
- sOutput += ";\n";
- else
- bAddSemikolon = sal_True;
- for ( sal_uInt16 j = 1; j < nLevel; j++ )
- sOutput += "\t";
- WriteToMerged( sOutput ,true );
- }
- }
- if ( bAddSemikolon ) {
- ByteString sOutput( ";" );
- WriteToMerged( sOutput , false );
- }
- }
-
- if ( pEntry && pResData->bTitle ) {
- sal_Bool bAddSemikolon = sal_False;
- sal_Bool bFirst = sal_True;
- ByteString sCur;
-
- for( unsigned int n = 0; n < aLanguages.size(); n++ ){
- sCur = aLanguages[ n ];
-
- ByteString sText;
- sal_Bool bText = pEntry->GetTransex3Text( sText, STRING_TYP_TITLE, sCur, sal_True );
- if ( bText && sText.Len() && sText != "-" ) {
- ByteString sOutput;
- if ( bNextMustBeDefineEOL) {
- if ( bFirst )
- sOutput += "\t\\\n";
- else
- sOutput += ";\t\\\n";
- }
- bFirst=sal_False;
- sOutput += "\t";
- sOutput += "Title";
- if ( ! Export::isSourceLanguage( sCur ) ) {
- sOutput += "[ ";
- sOutput += sCur;
- sOutput += " ] ";
- }
- sOutput += "= ";
- ConvertMergeContent( sText );
- sOutput += sText;
- if ( bDefine )
- sOutput += ";\\\n";
- else if ( !bNextMustBeDefineEOL )
- sOutput += ";\n";
- else
- bAddSemikolon = sal_True;
- for ( sal_uInt16 j = 1; j < nLevel; j++ )
- sOutput += "\t";
- WriteToMerged( sOutput ,true );
- }
- }
- if ( bAddSemikolon ) {
- ByteString sOutput( ";" );
- WriteToMerged( sOutput ,false);
- }
- }
- // Merge Lists
-
- if ( pResData->bList ) {
- bool bPairedList = false;
- ByteString sOldId = pResData->sId;
- ByteString sOldGId = pResData->sGId;
- ByteString sOldTyp = pResData->sResTyp;
- if ( pResData->sGId.Len())
- pResData->sGId += ".";
- pResData->sGId += sOldId;
- ByteString sSpace;
- for ( sal_uInt16 i = 1; i < nLevel-1; i++ )
- sSpace += "\t";
- for ( sal_uInt16 nT = LIST_STRING; nT <= LIST_UIENTRIES; nT++ ) {
- ExportList *pList = NULL;
- switch ( nT ) {
- case LIST_STRING : pResData->sResTyp = "stringlist"; pList = pResData->pStringList; bPairedList = false; break;
- case LIST_FILTER : pResData->sResTyp = "filterlist"; pList = pResData->pFilterList; bPairedList = false; break;
- case LIST_UIENTRIES : pResData->sResTyp = "uientries"; pList = pResData->pUIEntries;bPairedList = false; break;
- case LIST_ITEM : pResData->sResTyp = "itemlist"; pList = pResData->pItemList; bPairedList = false; break;
- case LIST_PAIRED : pResData->sResTyp = "pairedlist"; pList = pResData->pPairedList; bPairedList = true; break;
- }
- rtl::OString sCur;
- for( unsigned int n = 0; n < aLanguages.size(); n++ )
- {
- sCur = aLanguages[ n ];
- sal_uInt16 nIdx = 1;
-
- // Set matching pairedlist identifier
- if( bPairedList && pResData->pPairedList && ( nIdx == 1 ) ){
- ExportListEntry* pListE = ( ExportListEntry* ) (*pResData->pPairedList)[ nIdx-1 ];
- pResData->sId = GetPairedListID ( (*pListE)[ SOURCE_LANGUAGE ] );
- }
- else
- pResData->sId = ByteString("1");
-
- PFormEntrys *pEntrys;
- sal_uLong nLIndex = 0;
- sal_uLong nMaxIndex = 0;
- if ( pList )
- nMaxIndex = pList->GetSourceLanguageListEntryCount();
- pEntrys = pMergeDataFile->GetPFormEntrys( pResData );
- while( pEntrys && ( nLIndex < nMaxIndex )) {
- ByteString sText;
- sal_Bool bText;
- bText = pEntrys->GetTransex3Text( sText, STRING_TYP_TEXT, sCur, sal_True );
- if( !bText )
- bText = pEntrys->GetTransex3Text( sText , STRING_TYP_TEXT, SOURCE_LANGUAGE , sal_False );
-
- // Use fallback, if data is missing in sdf file
- if( !bText && bPairedList )
- {
- if( pResData->isMerged( sCur ) )
- break;
- const ByteString sPlist("pairedlist");
- ByteString sKey = MergeDataFile::CreateKey( sPlist , pResData->sGId , pResData->sId , sFilename );
- bText = pResData->getFallbackData( sKey , sText );
- }
- else if ( !bText ) // new fallback
- {
- if( pResData->isMerged( sCur ) ) break;
- const ByteString sPlist("list");
- ByteString sKey = MergeDataFile::CreateKey( sPlist , pResData->sGId , pResData->sId , sFilename );
- bText = pResData->getFallbackData( sKey , sText );
- } // new fallback
-
- if ( bText && sText.Len())
- {
- if ( nIdx == 1 )
- {
- rtl::OStringBuffer sHead;
- if ( bNextMustBeDefineEOL )
- sHead.append(RTL_CONSTASCII_STRINGPARAM("\\\n\t"));
- sHead.append(sSpace);
- switch ( nT )
- {
- case LIST_STRING:
- sHead.append(RTL_CONSTASCII_STRINGPARAM("StringList "));
- break;
- case LIST_FILTER:
- sHead.append(RTL_CONSTASCII_STRINGPARAM("FilterList "));
- break;
- case LIST_ITEM:
- sHead.append(RTL_CONSTASCII_STRINGPARAM("ItemList "));
- break;
- case LIST_PAIRED:
- sHead.append(RTL_CONSTASCII_STRINGPARAM("PairedList "));
- break;
- case LIST_UIENTRIES:
- sHead.append(RTL_CONSTASCII_STRINGPARAM("UIEntries "));
- break;
- }
- sHead.append(RTL_CONSTASCII_STRINGPARAM("[ "));
- sHead.append(sCur);
- sHead.append(RTL_CONSTASCII_STRINGPARAM(" ] "));
- //}
- if ( bDefine || bNextMustBeDefineEOL )
- {
- sHead.append(RTL_CONSTASCII_STRINGPARAM("= \\\n"));
- sHead.append(sSpace);
- sHead.append(RTL_CONSTASCII_STRINGPARAM("\t{\\\n\t"));
- }
- else
- {
- sHead.append(RTL_CONSTASCII_STRINGPARAM("= \n"));
- sHead.append(sSpace);
- sHead.append(RTL_CONSTASCII_STRINGPARAM("\t{\n\t"));
- }
- WriteToMerged(sHead.makeStringAndClear() , true);
- }
- ByteString sLine;
- if ( pList && (*pList)[ nLIndex ] )
- sLine = ( *(*pList)[ nLIndex ])[ SOURCE_LANGUAGE ];
- if ( !sLine.Len())
- sLine = sLastListLine;
-
- if ( sLastListLine.Search( "<" ) != STRING_NOTFOUND ) {
- if (( nT != LIST_UIENTRIES ) &&
- (( sLine.Search( "{" ) == STRING_NOTFOUND ) ||
- ( sLine.Search( "{" ) >= sLine.Search( "\"" ))) &&
- (( sLine.Search( "<" ) == STRING_NOTFOUND ) ||
- ( sLine.Search( "<" ) >= sLine.Search( "\"" ))))
- {
- sLine.SearchAndReplace( "\"", "< \"" );
- }
- }
-
- sal_uInt16 nStart, nEnd;
- nStart = sLine.Search( "\"" );
-
- ByteString sPostFix;
- if( !bPairedList ){
- nEnd = sLine.SearchBackward( '\"' );
- sPostFix = ByteString( sLine.Copy( ++nEnd ));
- sLine.Erase( nStart );
- }
-
-
- ConvertMergeContent( sText );
-
- // merge new res. in text line
- if( bPairedList ){
- sLine = MergePairedList( sLine , sText );
- }
- else{
- sLine += sText;
- sLine += sPostFix;
- }
-
- ByteString sText1( "\t" );
- sText1 += sLine;
- if ( bDefine || bNextMustBeDefineEOL )
- sText1 += " ;\\\n";
- else
- sText1 += " ;\n";
- sText1 += sSpace;
- sText1 += "\t";
- WriteToMerged( sText1 ,true );
-
- // Set matching pairedlist identifier
- if ( bPairedList ){
- nIdx++;
- ExportListEntry* pListE = ( ExportListEntry* )(*pResData->pPairedList)[ ( nIdx ) -1 ];
- if( pListE ){
- pResData->sId = GetPairedListID ( (*pListE)[ SOURCE_LANGUAGE ] );
- }
- }
- else
- pResData->sId = rtl::OString::valueOf(static_cast<sal_Int32>(++nIdx));
- }
- else
- break;
- nLIndex ++;
- PFormEntrys *oldEntry = pEntrys;
- pEntrys = pMergeDataFile->GetPFormEntrys( pResData );
- if( !pEntrys )
- pEntrys = oldEntry;
- }
- if ( nIdx > 1 ) {
- ByteString sFooter( sSpace.Copy( 1 ));
- if ( bNextMustBeDefineEOL )
- sFooter += "};";
- else if ( !bDefine )
- sFooter += "};\n\t";
- else
- sFooter += "\n\n";
- WriteToMerged( sFooter ,true );
- }
- }
- }
-
- pResData->sId = sOldId;
- pResData->sGId = sOldGId;
- pResData->sResTyp = sOldTyp;
- }
- }
- break;
- case MERGE_MODE_LIST : {
- ExportList *pList = NULL;
- switch ( nList ) {
- // PairedList
- case LIST_STRING : pList = pResData->pStringList; break;
- case LIST_FILTER : pList = pResData->pFilterList; break;
- case LIST_UIENTRIES : pList = pResData->pUIEntries; break;
- case LIST_ITEM : pList = pResData->pItemList; break;
- case LIST_PAIRED : pList = pResData->pPairedList; break;
-
- }
-
- nListIndex++;
- sal_uLong nMaxIndex = 0;
- if ( pList )
- nMaxIndex = pList->GetSourceLanguageListEntryCount();
- ByteString sLine;
- if ( pList && (*pList)[ nListIndex ] )
- sLine = ( *(*pList)[ nListIndex ])[ SOURCE_LANGUAGE ];
- if ( !sLine.Len())
- sLine = sLastListLine;
-
- if ( sLastListLine.Search( "<" ) != STRING_NOTFOUND ) {
- if (( nList != LIST_UIENTRIES ) &&
- (( sLine.Search( "{" ) == STRING_NOTFOUND ) ||
- ( sLine.Search( "{" ) >= sLine.Search( "\"" ))) &&
- (( sLine.Search( "<" ) == STRING_NOTFOUND ) ||
- ( sLine.Search( "<" ) >= sLine.Search( "\"" ))))
- {
- sLine.SearchAndReplace( "\"", "< \"" );
- }
- }
-
- while( PrepareTextToMerge( sLine, nList, m_sListLang, pResData ) && ( nListIndex <= nMaxIndex )) {
- ByteString sText( "\t" );
- sText += sLine;
- sText += " ;";
- sText += "\n";
- for ( sal_uInt16 i = 0; i < nLevel; i++ )
- sText += "\t";
- WriteToMerged( sText ,false );
- nListIndex++;
- if ( pList && (*pList)[ nListIndex ])
- sLine = ( *(*pList)[ nListIndex ])[ SOURCE_LANGUAGE ];
- if ( !sLine.Len())
- sLine = sLastListLine;
- sLine += " ;";
- }
- }
- break;
- }
- pParseQueue->bMflag = false;
-}
-
-ByteString Export::MergePairedList( ByteString& sLine , ByteString& sText ){
-// < "xy" ; IDENTIFIER ; >
- ByteString sPre = sLine.Copy( 0 , sLine.Search('\"') );
- ByteString sPost = sLine.Copy( sLine.SearchBackward('\"') + 1 , sLine.Len() );
- sPre.Append( sText );
- sPre.Append( sPost );
- return sPre;
-}
-
-/*****************************************************************************/
-void Export::SetChildWithText()
-/*****************************************************************************/
-{
- if ( aResStack.size() > 1 ) {
- for ( size_t i = 0; i < aResStack.size() - 1; i++ ) {
- aResStack[ i ]->bChildWithText = sal_True;
- }
- }
-}
-
-void ParserQueue::Push( const QueueEntry& aEntry ){
- sal_uInt16 nLen = aEntry.sLine.Len();
-
- if( !bStart ){
- aQueueCur->push( aEntry );
- if( nLen > 1 && aEntry.sLine.GetChar( nLen-1 ) == '\n' )
- bStart = true;
- else if ( aEntry.nTyp != IGNOREDTOKENS ){
- if( nLen > 1 && ( aEntry.sLine.GetChar( nLen-1 ) == '\\') ){
- // Next is Macro
- bCurrentIsM = true;
- }else{
- // Next is no Macro
- bCurrentIsM = false;
- }
- }
- }
- else{
- aQueueNext->push( aEntry );
- if( nLen > 1 && aEntry.sLine.GetChar( nLen-1 ) != '\n' ){
- if( nLen > 1 && ( aEntry.sLine.GetChar( nLen-1 ) == '\\') ){
- // Next is Macro
- bNextIsM = true;
- }
- else{
- // Next is no Macro
- bNextIsM = false;
- }
- }else if( nLen > 2 && aEntry.sLine.GetChar( nLen-1 ) == '\n' ){
- if( aEntry.nTyp != IGNOREDTOKENS ){
- if( nLen > 2 && ( aEntry.sLine.GetChar( nLen-2 ) == '\\') ){
- // Next is Macro
- bNextIsM = true;
- }
- else{
- // Next is no Macro
- bNextIsM = false;
- }
- }
- // Pop current
- Pop( *aQueueCur );
- bLastWasM = bCurrentIsM;
- // next -> current
- bCurrentIsM = bNextIsM;
- aQref = aQueueCur;
- aQueueCur = aQueueNext;
- aQueueNext = aQref;
-
- }
-
- else{
- // Pop current
- Pop( *aQueueCur );
- bLastWasM = bCurrentIsM;
- // next -> current
- bCurrentIsM = bNextIsM;
- aQref = aQueueCur;
- aQueueCur = aQueueNext;
- aQueueNext = aQref;
- }
- }
-}
-
-void ParserQueue::Close(){
- // Pop current
- Pop( *aQueueCur );
- // next -> current
- bLastWasM = bCurrentIsM;
- bCurrentIsM = bNextIsM;
- aQref = aQueueCur;
- aQueueCur = aQueueNext;
- aQueueNext = aQref;
- bNextIsM = false;
- Pop( *aQueueNext );
-};
-void ParserQueue::Pop( std::queue<QueueEntry>& aQueue ){
- while( !aQueue.empty() ){
- QueueEntry aEntry = aQueue.front();
- aQueue.pop();
- aExport.Execute( aEntry.nTyp , (char*) aEntry.sLine.GetBuffer() );
- }
-}
-ParserQueue::ParserQueue( Export& aExportObj )
- :
- bCurrentIsM( false ),
- bNextIsM( false ) ,
- bLastWasM( false ),
- bMflag( false ) ,
- aExport( aExportObj ) ,
- bStart( false ) ,
- bStartNext( false )
-{
- aQueueNext = new std::queue<QueueEntry>;
- aQueueCur = new std::queue<QueueEntry>;
-}
-
-
-ParserQueue::~ParserQueue(){
- if( aQueueNext ) delete aQueueNext;
- if( aQueueCur ) delete aQueueCur;
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */