1*3cd96b95SAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
3*3cd96b95SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
4*3cd96b95SAndrew Rist * or more contributor license agreements. See the NOTICE file
5*3cd96b95SAndrew Rist * distributed with this work for additional information
6*3cd96b95SAndrew Rist * regarding copyright ownership. The ASF licenses this file
7*3cd96b95SAndrew Rist * to you under the Apache License, Version 2.0 (the
8*3cd96b95SAndrew Rist * "License"); you may not use this file except in compliance
9*3cd96b95SAndrew Rist * with the License. You may obtain a copy of the License at
10*3cd96b95SAndrew Rist *
11*3cd96b95SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12*3cd96b95SAndrew Rist *
13*3cd96b95SAndrew Rist * Unless required by applicable law or agreed to in writing,
14*3cd96b95SAndrew Rist * software distributed under the License is distributed on an
15*3cd96b95SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*3cd96b95SAndrew Rist * KIND, either express or implied. See the License for the
17*3cd96b95SAndrew Rist * specific language governing permissions and limitations
18*3cd96b95SAndrew Rist * under the License.
19*3cd96b95SAndrew Rist *
20*3cd96b95SAndrew Rist *************************************************************/
21*3cd96b95SAndrew Rist
22*3cd96b95SAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_l10ntools.hxx"
26cdf0e10cSrcweir #include <stdio.h>
27cdf0e10cSrcweir #include <stdlib.h>
28cdf0e10cSrcweir #include <tools/fsys.hxx>
29cdf0e10cSrcweir #include "export.hxx"
30cdf0e10cSrcweir #include "tokens.h"
31cdf0e10cSrcweir #include "utf8conv.hxx"
32cdf0e10cSrcweir #include <iostream>
33cdf0e10cSrcweir
34cdf0e10cSrcweir extern "C" { int yyerror( char * ); }
35cdf0e10cSrcweir extern "C" { int YYWarning( char * ); }
36cdf0e10cSrcweir
37cdf0e10cSrcweir Export *pExport = 0L;
38cdf0e10cSrcweir
39cdf0e10cSrcweir // defines to parse command line
40cdf0e10cSrcweir #define STATE_NON 0x0001
41cdf0e10cSrcweir #define STATE_INPUT 0x0002
42cdf0e10cSrcweir #define STATE_OUTPUT 0x0003
43cdf0e10cSrcweir #define STATE_PRJ 0x0004
44cdf0e10cSrcweir #define STATE_ROOT 0x0005
45cdf0e10cSrcweir #define STATE_MERGESRC 0x0006
46cdf0e10cSrcweir #define STATE_ERRORLOG 0x0007
47cdf0e10cSrcweir #define STATE_BREAKHELP 0x0008
48cdf0e10cSrcweir #define STATE_UNMERGE 0x0009
49cdf0e10cSrcweir #define STATE_UTF8 0x000A
50cdf0e10cSrcweir #define STATE_LANGUAGES 0X000B
51cdf0e10cSrcweir
52cdf0e10cSrcweir // set of global variables
53cdf0e10cSrcweir DECLARE_LIST( FileList, ByteString * )
54cdf0e10cSrcweir FileList aInputFileList;
55cdf0e10cSrcweir sal_Bool bEnableExport;
56cdf0e10cSrcweir sal_Bool bMergeMode;
57cdf0e10cSrcweir sal_Bool bErrorLog;
58cdf0e10cSrcweir sal_Bool bBreakWhenHelpText;
59cdf0e10cSrcweir sal_Bool bUnmerge;
60cdf0e10cSrcweir sal_Bool bUTF8;
61cdf0e10cSrcweir ByteString sPrj;
62cdf0e10cSrcweir ByteString sPrjRoot;
63cdf0e10cSrcweir ByteString sActFileName;
64cdf0e10cSrcweir ByteString sOutputFile;
65cdf0e10cSrcweir ByteString sMergeSrc;
66cdf0e10cSrcweir ByteString sTempFile;
67cdf0e10cSrcweir ByteString sFile;
68cdf0e10cSrcweir MergeDataFile *pMergeDataFile;
69cdf0e10cSrcweir FILE *pTempFile;
70cdf0e10cSrcweir
71cdf0e10cSrcweir
72cdf0e10cSrcweir ByteString sStrBuffer;
73cdf0e10cSrcweir bool bMarcro = false;
74cdf0e10cSrcweir
75cdf0e10cSrcweir extern "C" {
76cdf0e10cSrcweir // the whole interface to lexer is in this extern "C" section
77cdf0e10cSrcweir
78cdf0e10cSrcweir
79cdf0e10cSrcweir /*****************************************************************************/
GetOutputFile(int argc,char * argv[])80cdf0e10cSrcweir extern char *GetOutputFile( int argc, char* argv[])
81cdf0e10cSrcweir /*****************************************************************************/
82cdf0e10cSrcweir {
83cdf0e10cSrcweir bEnableExport = sal_False;
84cdf0e10cSrcweir bMergeMode = sal_False;
85cdf0e10cSrcweir bErrorLog = sal_True;
86cdf0e10cSrcweir bBreakWhenHelpText = sal_False;
87cdf0e10cSrcweir bUnmerge = sal_False;
88cdf0e10cSrcweir bUTF8 = sal_True;
89cdf0e10cSrcweir sPrj = "";
90cdf0e10cSrcweir sPrjRoot = "";
91cdf0e10cSrcweir sActFileName = "";
92cdf0e10cSrcweir Export::sLanguages = "";
93cdf0e10cSrcweir Export::sForcedLanguages = "";
94cdf0e10cSrcweir sTempFile = "";
95cdf0e10cSrcweir pTempFile = NULL;
96cdf0e10cSrcweir sal_uInt16 nState = STATE_NON;
97cdf0e10cSrcweir sal_Bool bInput = sal_False;
98cdf0e10cSrcweir
99cdf0e10cSrcweir // parse command line
100cdf0e10cSrcweir for( int i = 1; i < argc; i++ ) {
101cdf0e10cSrcweir ByteString sSwitch( argv[ i ] );
102cdf0e10cSrcweir
103cdf0e10cSrcweir if (sSwitch == "-i" || sSwitch == "-I" ) {
104cdf0e10cSrcweir nState = STATE_INPUT; // next tokens specifies source files
105cdf0e10cSrcweir }
106cdf0e10cSrcweir else if (sSwitch == "-o" || sSwitch == "-O" ) {
107cdf0e10cSrcweir nState = STATE_OUTPUT; // next token specifies the dest file
108cdf0e10cSrcweir }
109cdf0e10cSrcweir else if (sSwitch == "-p" || sSwitch == "-P" ) {
110cdf0e10cSrcweir nState = STATE_PRJ; // next token specifies the cur. project
111cdf0e10cSrcweir }
112cdf0e10cSrcweir
113cdf0e10cSrcweir else if (sSwitch == "-r" || sSwitch == "-R" ) {
114cdf0e10cSrcweir nState = STATE_ROOT; // next token specifies path to project root
115cdf0e10cSrcweir }
116cdf0e10cSrcweir else if (sSwitch == "-m" || sSwitch == "-M" ) {
117cdf0e10cSrcweir nState = STATE_MERGESRC; // next token specifies the merge database
118cdf0e10cSrcweir }
119cdf0e10cSrcweir else if (sSwitch == "-e" || sSwitch == "-E" ) {
120cdf0e10cSrcweir nState = STATE_ERRORLOG;
121cdf0e10cSrcweir bErrorLog = sal_False;
122cdf0e10cSrcweir }
123cdf0e10cSrcweir else if (sSwitch == "-b" || sSwitch == "-B" ) {
124cdf0e10cSrcweir nState = STATE_BREAKHELP;
125cdf0e10cSrcweir bBreakWhenHelpText = sal_True;
126cdf0e10cSrcweir }
127cdf0e10cSrcweir else if (sSwitch == "-u" || sSwitch == "-U" ) {
128cdf0e10cSrcweir nState = STATE_UNMERGE;
129cdf0e10cSrcweir bUnmerge = sal_True;
130cdf0e10cSrcweir bMergeMode = sal_True;
131cdf0e10cSrcweir }
132cdf0e10cSrcweir else if ( sSwitch.ToUpperAscii() == "-UTF8" ) {
133cdf0e10cSrcweir nState = STATE_UTF8;
134cdf0e10cSrcweir bUTF8 = sal_True;
135cdf0e10cSrcweir }
136cdf0e10cSrcweir else if ( sSwitch.ToUpperAscii() == "-NOUTF8" ) {
137cdf0e10cSrcweir nState = STATE_UTF8;
138cdf0e10cSrcweir bUTF8 = sal_False;
139cdf0e10cSrcweir }
140cdf0e10cSrcweir else if ( sSwitch == "-l" || sSwitch == "-L" ) {
141cdf0e10cSrcweir nState = STATE_LANGUAGES;
142cdf0e10cSrcweir }
143cdf0e10cSrcweir else {
144cdf0e10cSrcweir switch ( nState ) {
145cdf0e10cSrcweir case STATE_NON: {
146cdf0e10cSrcweir return NULL; // no valid command line
147cdf0e10cSrcweir }
148cdf0e10cSrcweir case STATE_INPUT: {
149cdf0e10cSrcweir aInputFileList.Insert( new ByteString( argv[ i ]), LIST_APPEND );
150cdf0e10cSrcweir bInput = sal_True; // min. one source file found
151cdf0e10cSrcweir }
152cdf0e10cSrcweir break;
153cdf0e10cSrcweir case STATE_OUTPUT: {
154cdf0e10cSrcweir sOutputFile = ByteString( argv[ i ]); // the dest. file
155cdf0e10cSrcweir }
156cdf0e10cSrcweir break;
157cdf0e10cSrcweir case STATE_PRJ: {
158cdf0e10cSrcweir sPrj = ByteString( argv[ i ]);
159cdf0e10cSrcweir }
160cdf0e10cSrcweir break;
161cdf0e10cSrcweir case STATE_ROOT: {
162cdf0e10cSrcweir sPrjRoot = ByteString( argv[ i ]); // path to project root
163cdf0e10cSrcweir }
164cdf0e10cSrcweir break;
165cdf0e10cSrcweir case STATE_MERGESRC: {
166cdf0e10cSrcweir sMergeSrc = ByteString( argv[ i ]);
167cdf0e10cSrcweir bMergeMode = sal_True; // activate merge mode, cause merge database found
168cdf0e10cSrcweir }
169cdf0e10cSrcweir break;
170cdf0e10cSrcweir case STATE_LANGUAGES: {
171cdf0e10cSrcweir Export::sLanguages = ByteString( argv[ i ]);
172cdf0e10cSrcweir }
173cdf0e10cSrcweir break;
174cdf0e10cSrcweir }
175cdf0e10cSrcweir }
176cdf0e10cSrcweir }
177cdf0e10cSrcweir if( bUnmerge ) sMergeSrc = ByteString();
178cdf0e10cSrcweir if ( bInput ) {
179cdf0e10cSrcweir // command line is valid
180cdf0e10cSrcweir bEnableExport = sal_True;
181cdf0e10cSrcweir char *pReturn = new char[ sOutputFile.Len() + 1 ];
182cdf0e10cSrcweir strcpy( pReturn, sOutputFile.GetBuffer()); // #100211# - checked
183cdf0e10cSrcweir return pReturn;
184cdf0e10cSrcweir }
185cdf0e10cSrcweir
186cdf0e10cSrcweir // command line is not valid
187cdf0e10cSrcweir return NULL;
188cdf0e10cSrcweir }
189cdf0e10cSrcweir /*****************************************************************************/
InitExport(char * pOutput,char * pFilename)190cdf0e10cSrcweir int InitExport( char *pOutput , char* pFilename )
191cdf0e10cSrcweir /*****************************************************************************/
192cdf0e10cSrcweir {
193cdf0e10cSrcweir // instanciate Export
194cdf0e10cSrcweir ByteString sOutput( pOutput );
195cdf0e10cSrcweir ByteString sFilename( pFilename );
196cdf0e10cSrcweir
197cdf0e10cSrcweir if ( bMergeMode && !bUnmerge ) {
198cdf0e10cSrcweir // merge mode enabled, so read database
199cdf0e10cSrcweir pExport = new Export(sOutput, bEnableExport, sPrj, sPrjRoot, sMergeSrc , sFilename );
200cdf0e10cSrcweir }
201cdf0e10cSrcweir else
202cdf0e10cSrcweir // no merge mode, only export
203cdf0e10cSrcweir pExport = new Export( sOutput, bEnableExport, sPrj, sPrjRoot , sFilename );
204cdf0e10cSrcweir return 1;
205cdf0e10cSrcweir }
206cdf0e10cSrcweir
207cdf0e10cSrcweir /*****************************************************************************/
EndExport()208cdf0e10cSrcweir int EndExport()
209cdf0e10cSrcweir /*****************************************************************************/
210cdf0e10cSrcweir {
211cdf0e10cSrcweir delete pExport;
212cdf0e10cSrcweir return 1;
213cdf0e10cSrcweir }
214cdf0e10cSrcweir
getFilename()215cdf0e10cSrcweir extern const char* getFilename()
216cdf0e10cSrcweir {
217cdf0e10cSrcweir return (*(aInputFileList.GetObject( 0 ))).GetBuffer();
218cdf0e10cSrcweir }
219cdf0e10cSrcweir /*****************************************************************************/
GetNextFile()220cdf0e10cSrcweir extern FILE *GetNextFile()
221cdf0e10cSrcweir /*****************************************************************************/
222cdf0e10cSrcweir {
223cdf0e10cSrcweir // look for next valid filename in input file list
224cdf0e10cSrcweir if ( sTempFile.Len()) {
225cdf0e10cSrcweir fclose( pTempFile );
226cdf0e10cSrcweir String sTemp( sTempFile, RTL_TEXTENCODING_ASCII_US );
227cdf0e10cSrcweir DirEntry aTemp( sTemp );
228cdf0e10cSrcweir aTemp.Kill();
229cdf0e10cSrcweir }
230cdf0e10cSrcweir
231cdf0e10cSrcweir while ( aInputFileList.Count()) {
232cdf0e10cSrcweir ByteString sFileName( *(aInputFileList.GetObject( 0 )));
233cdf0e10cSrcweir
234cdf0e10cSrcweir ByteString sOrigFile( sFileName );
235cdf0e10cSrcweir
236cdf0e10cSrcweir sFileName = Export::GetNativeFile( sFileName );
237cdf0e10cSrcweir delete aInputFileList.GetObject(( sal_uLong ) 0 );
238cdf0e10cSrcweir aInputFileList.Remove(( sal_uLong ) 0 );
239cdf0e10cSrcweir
240cdf0e10cSrcweir if ( sFileName == "" ) {
241cdf0e10cSrcweir fprintf( stderr, "ERROR: Could not precompile File %s\n",
242cdf0e10cSrcweir sOrigFile.GetBuffer());
243cdf0e10cSrcweir return GetNextFile();
244cdf0e10cSrcweir }
245cdf0e10cSrcweir
246cdf0e10cSrcweir sTempFile = sFileName;
247cdf0e10cSrcweir Export::RemoveUTF8ByteOrderMarkerFromFile( sFileName );
248cdf0e10cSrcweir
249cdf0e10cSrcweir // able to open file?
250cdf0e10cSrcweir FILE *pFile = fopen( sFileName.GetBuffer(), "r" );
251cdf0e10cSrcweir if ( !pFile )
252cdf0e10cSrcweir fprintf( stderr, "Error: Could not open File %s\n",
253cdf0e10cSrcweir sFileName.GetBuffer());
254cdf0e10cSrcweir else {
255cdf0e10cSrcweir pTempFile = pFile;
256cdf0e10cSrcweir
257cdf0e10cSrcweir // this is a valid file which can be opened, so
258cdf0e10cSrcweir // create path to project root
259cdf0e10cSrcweir DirEntry aEntry( String( sOrigFile, RTL_TEXTENCODING_ASCII_US ));
260cdf0e10cSrcweir aEntry.ToAbs();
261cdf0e10cSrcweir ByteString sFullEntry( aEntry.GetFull(), RTL_TEXTENCODING_ASCII_US );
262cdf0e10cSrcweir aEntry += DirEntry( String( "..", RTL_TEXTENCODING_ASCII_US ));
263cdf0e10cSrcweir aEntry += DirEntry( sPrjRoot );
264cdf0e10cSrcweir ByteString sPrjEntry( aEntry.GetFull(), RTL_TEXTENCODING_ASCII_US );
265cdf0e10cSrcweir
266cdf0e10cSrcweir // create file name, beginnig with project root
267cdf0e10cSrcweir // (e.g.: source\ui\src\menue.src)
268cdf0e10cSrcweir sActFileName = sFullEntry.Copy( sPrjEntry.Len() + 1 );
269cdf0e10cSrcweir
270cdf0e10cSrcweir
271cdf0e10cSrcweir sActFileName.SearchAndReplaceAll( "/", "\\" );
272cdf0e10cSrcweir sFile = sActFileName;
273cdf0e10cSrcweir
274cdf0e10cSrcweir if ( pExport ) {
275cdf0e10cSrcweir // create instance of class export
276cdf0e10cSrcweir pExport->Init();
277cdf0e10cSrcweir }
278cdf0e10cSrcweir // return the valid file handle
279cdf0e10cSrcweir return pFile;
280cdf0e10cSrcweir }
281cdf0e10cSrcweir }
282cdf0e10cSrcweir // this means the file could not be opened
283cdf0e10cSrcweir return NULL;
284cdf0e10cSrcweir }
285cdf0e10cSrcweir
Parse(int nTyp,const char * pTokenText)286cdf0e10cSrcweir int Parse( int nTyp, const char *pTokenText ){
287cdf0e10cSrcweir pExport->Execute( nTyp , pTokenText );
288cdf0e10cSrcweir return 1;
289cdf0e10cSrcweir }
Close()290cdf0e10cSrcweir void Close(){
291cdf0e10cSrcweir pExport->pParseQueue->Close();
292cdf0e10cSrcweir }
293cdf0e10cSrcweir /*****************************************************************************/
WorkOnTokenSet(int nTyp,char * pTokenText)294cdf0e10cSrcweir int WorkOnTokenSet( int nTyp, char *pTokenText )
295cdf0e10cSrcweir /*****************************************************************************/
296cdf0e10cSrcweir {
297cdf0e10cSrcweir
298cdf0e10cSrcweir pExport->pParseQueue->Push( QueueEntry( nTyp , ByteString( pTokenText ) ) );
299cdf0e10cSrcweir return 1;
300cdf0e10cSrcweir }
301cdf0e10cSrcweir
302cdf0e10cSrcweir } // extern
303cdf0e10cSrcweir
304cdf0e10cSrcweir extern "C" {
305cdf0e10cSrcweir /*****************************************************************************/
SetError()306cdf0e10cSrcweir int SetError()
307cdf0e10cSrcweir /*****************************************************************************/
308cdf0e10cSrcweir {
309cdf0e10cSrcweir // set error at global instance of class Export
310cdf0e10cSrcweir pExport->SetError();
311cdf0e10cSrcweir return 1;
312cdf0e10cSrcweir }
313cdf0e10cSrcweir }
314cdf0e10cSrcweir
315cdf0e10cSrcweir extern "C" {
316cdf0e10cSrcweir /*****************************************************************************/
GetError()317cdf0e10cSrcweir int GetError()
318cdf0e10cSrcweir /*****************************************************************************/
319cdf0e10cSrcweir {
320cdf0e10cSrcweir // get error at global instance of class Export
321cdf0e10cSrcweir if ( pExport->GetError())
322cdf0e10cSrcweir return 1;
323cdf0e10cSrcweir return sal_False;
324cdf0e10cSrcweir }
325cdf0e10cSrcweir }
326cdf0e10cSrcweir
327cdf0e10cSrcweir //
328cdf0e10cSrcweir // class ResData
329cdf0e10cSrcweir //
330cdf0e10cSrcweir
Dump()331cdf0e10cSrcweir void ResData::Dump(){
332cdf0e10cSrcweir printf("**************\nResData\n");
333cdf0e10cSrcweir printf("sPForm = %s , sResTyp = %s , sId = %s , sGId = %s , sHelpId = %s\n",sPForm.GetBuffer()
334cdf0e10cSrcweir ,sResTyp.GetBuffer(),sId.GetBuffer(),sGId.GetBuffer(),sHelpId.GetBuffer());
335cdf0e10cSrcweir
336cdf0e10cSrcweir ByteString a("*pStringList");
337cdf0e10cSrcweir ByteString b("*pUIEntries");
338cdf0e10cSrcweir ByteString c("*pFilterList");
339cdf0e10cSrcweir ByteString d("*pItemList");
340cdf0e10cSrcweir ByteString e("*pPairedList");
341cdf0e10cSrcweir ByteString f("sText");
342cdf0e10cSrcweir
343cdf0e10cSrcweir Export::DumpMap( f , sText );
344cdf0e10cSrcweir
345cdf0e10cSrcweir if( pStringList ) Export::DumpExportList( a , *pStringList );
346cdf0e10cSrcweir if( pUIEntries ) Export::DumpExportList( b , *pUIEntries );
347cdf0e10cSrcweir if( pFilterList ) Export::DumpExportList( c , *pFilterList );
348cdf0e10cSrcweir if( pItemList ) Export::DumpExportList( d , *pItemList );
349cdf0e10cSrcweir if( pPairedList ) Export::DumpExportList( e , *pPairedList );
350cdf0e10cSrcweir printf("\n");
351cdf0e10cSrcweir }
352cdf0e10cSrcweir
addFallbackData(ByteString & sId_in,const ByteString & sText_in)353cdf0e10cSrcweir void ResData::addFallbackData( ByteString& sId_in , const ByteString& sText_in ){
354cdf0e10cSrcweir //printf(" ResData::addFallbackData ( sId = %s , sText = %s )\n", sId_in.GetBuffer() , sText_in.GetBuffer() );
355cdf0e10cSrcweir aFallbackData[ sId_in ] = sText_in;
356cdf0e10cSrcweir }
getFallbackData(ByteString & sId_in,ByteString & sText_inout)357cdf0e10cSrcweir bool ResData::getFallbackData( ByteString& sId_in , ByteString& sText_inout ){
358cdf0e10cSrcweir sText_inout = aFallbackData[ sId_in ];
359cdf0e10cSrcweir //printf("ResData::getFallbackData( sId = %s , return sText = %s \n" , sId_in.GetBuffer(), sText_inout.GetBuffer());
360cdf0e10cSrcweir return sText_inout.Len() > 0;
361cdf0e10cSrcweir }
362cdf0e10cSrcweir
addMergedLanguage(ByteString & sLang)363cdf0e10cSrcweir void ResData::addMergedLanguage( ByteString& sLang ){
364cdf0e10cSrcweir aMergedLanguages[ sLang ]=ByteString("1");
365cdf0e10cSrcweir }
isMerged(ByteString & sLang)366cdf0e10cSrcweir bool ResData::isMerged( ByteString& sLang ){
367cdf0e10cSrcweir return aMergedLanguages[ sLang ].Equals("1");
368cdf0e10cSrcweir }
369cdf0e10cSrcweir
370cdf0e10cSrcweir /*****************************************************************************/
SetId(const ByteString & rId,sal_uInt16 nLevel)371cdf0e10cSrcweir sal_Bool ResData::SetId( const ByteString &rId, sal_uInt16 nLevel )
372cdf0e10cSrcweir /*****************************************************************************/
373cdf0e10cSrcweir {
374cdf0e10cSrcweir if ( nLevel > nIdLevel )
375cdf0e10cSrcweir {
376cdf0e10cSrcweir nIdLevel = nLevel;
377cdf0e10cSrcweir sId = rId;
378cdf0e10cSrcweir
379cdf0e10cSrcweir if ( bChild && bChildWithText ) {
380cdf0e10cSrcweir ByteString sError( "ResId after child definition" );
381cdf0e10cSrcweir yyerror( sError.GetBufferAccess());
382cdf0e10cSrcweir sError.ReleaseBufferAccess();
383cdf0e10cSrcweir SetError();
384cdf0e10cSrcweir }
385cdf0e10cSrcweir
386cdf0e10cSrcweir if ( sId.Len() > 255 ) {
387cdf0e10cSrcweir ByteString sWarning( "LocalId > 255 chars, truncating..." );
388cdf0e10cSrcweir YYWarning( sWarning.GetBufferAccess());
389cdf0e10cSrcweir sWarning.ReleaseBufferAccess();
390cdf0e10cSrcweir sId.Erase( 255 );
391cdf0e10cSrcweir sId.EraseTrailingChars( ' ' );
392cdf0e10cSrcweir sId.EraseTrailingChars( '\t' );
393cdf0e10cSrcweir }
394cdf0e10cSrcweir
395cdf0e10cSrcweir return sal_True;
396cdf0e10cSrcweir }
397cdf0e10cSrcweir
398cdf0e10cSrcweir return sal_False;
399cdf0e10cSrcweir }
400cdf0e10cSrcweir
401cdf0e10cSrcweir //
402cdf0e10cSrcweir // class Export
403cdf0e10cSrcweir //
404cdf0e10cSrcweir
405cdf0e10cSrcweir /*****************************************************************************/
Export(const ByteString & rOutput,sal_Bool bWrite,const ByteString & rPrj,const ByteString & rPrjRoot,const ByteString & rFile)406cdf0e10cSrcweir Export::Export( const ByteString &rOutput, sal_Bool bWrite,
407cdf0e10cSrcweir const ByteString &rPrj, const ByteString &rPrjRoot , const ByteString& rFile )
408cdf0e10cSrcweir /*****************************************************************************/
409cdf0e10cSrcweir :
410cdf0e10cSrcweir pWordTransformer( NULL ),
411cdf0e10cSrcweir aCharSet( RTL_TEXTENCODING_MS_1252 ),
412cdf0e10cSrcweir bDefine( sal_False ),
413cdf0e10cSrcweir bNextMustBeDefineEOL( sal_False ),
414cdf0e10cSrcweir nLevel( 0 ),
415cdf0e10cSrcweir nList( LIST_NON ),
416cdf0e10cSrcweir nListIndex( 0 ),
417cdf0e10cSrcweir nListLevel( 0 ),
418cdf0e10cSrcweir bSkipFile( false ),
419cdf0e10cSrcweir sProject( sPrj ),
420cdf0e10cSrcweir sRoot( sPrjRoot ),
421cdf0e10cSrcweir bEnableExport( bWrite ),
422cdf0e10cSrcweir bMergeMode( bUnmerge ),
423cdf0e10cSrcweir bError( sal_False ),
424cdf0e10cSrcweir bReadOver( sal_False ),
425cdf0e10cSrcweir bDontWriteOutput( sal_False ),
426cdf0e10cSrcweir sFilename( rFile )
427cdf0e10cSrcweir {
428cdf0e10cSrcweir pParseQueue = new ParserQueue( *this );
429cdf0e10cSrcweir (void) rPrj;
430cdf0e10cSrcweir (void) rPrjRoot;
431cdf0e10cSrcweir (void) rFile;
432cdf0e10cSrcweir
433cdf0e10cSrcweir if( !isInitialized ) InitLanguages();
434cdf0e10cSrcweir // used when export is enabled
435cdf0e10cSrcweir
436cdf0e10cSrcweir // open output stream
437cdf0e10cSrcweir if ( bEnableExport ) {
438cdf0e10cSrcweir aOutput.Open( String( rOutput, RTL_TEXTENCODING_ASCII_US ), STREAM_STD_WRITE | STREAM_TRUNC );
439cdf0e10cSrcweir if( !aOutput.IsOpen() ) {
440cdf0e10cSrcweir printf("ERROR : Can't open file %s\n",rOutput.GetBuffer());
441cdf0e10cSrcweir exit ( -1 );
442cdf0e10cSrcweir }
443cdf0e10cSrcweir aOutput.SetStreamCharSet( RTL_TEXTENCODING_UTF8 );
444cdf0e10cSrcweir
445cdf0e10cSrcweir aOutput.SetLineDelimiter( LINEEND_CRLF );
446cdf0e10cSrcweir }
447cdf0e10cSrcweir }
448cdf0e10cSrcweir
449cdf0e10cSrcweir /*****************************************************************************/
Export(const ByteString & rOutput,sal_Bool bWrite,const ByteString & rPrj,const ByteString & rPrjRoot,const ByteString & rMergeSource,const ByteString & rFile)450cdf0e10cSrcweir Export::Export( const ByteString &rOutput, sal_Bool bWrite,
451cdf0e10cSrcweir const ByteString &rPrj, const ByteString &rPrjRoot,
452cdf0e10cSrcweir const ByteString &rMergeSource , const ByteString& rFile )
453cdf0e10cSrcweir /*****************************************************************************/
454cdf0e10cSrcweir :
455cdf0e10cSrcweir pWordTransformer( NULL ),
456cdf0e10cSrcweir aCharSet( RTL_TEXTENCODING_MS_1252 ),
457cdf0e10cSrcweir bDefine( sal_False ),
458cdf0e10cSrcweir bNextMustBeDefineEOL( sal_False ),
459cdf0e10cSrcweir nLevel( 0 ),
460cdf0e10cSrcweir nList( LIST_NON ),
461cdf0e10cSrcweir nListIndex( 0 ),
462cdf0e10cSrcweir nListLevel( 0 ),
463cdf0e10cSrcweir bSkipFile( false ),
464cdf0e10cSrcweir sProject( sPrj ),
465cdf0e10cSrcweir sRoot( sPrjRoot ),
466cdf0e10cSrcweir bEnableExport( bWrite ),
467cdf0e10cSrcweir bMergeMode( sal_True ),
468cdf0e10cSrcweir sMergeSrc( rMergeSource ),
469cdf0e10cSrcweir bError( sal_False ),
470cdf0e10cSrcweir bReadOver( sal_False ),
471cdf0e10cSrcweir bDontWriteOutput( sal_False ),
472cdf0e10cSrcweir sFilename( rFile )
473cdf0e10cSrcweir {
474cdf0e10cSrcweir (void) rPrj;
475cdf0e10cSrcweir (void) rPrjRoot;
476cdf0e10cSrcweir (void) rFile;
477cdf0e10cSrcweir pParseQueue = new ParserQueue( *this );
478cdf0e10cSrcweir if( !isInitialized ) InitLanguages( bMergeMode );
479cdf0e10cSrcweir // used when merge is enabled
480cdf0e10cSrcweir
481cdf0e10cSrcweir // open output stream
482cdf0e10cSrcweir if ( bEnableExport ) {
483cdf0e10cSrcweir aOutput.Open( String( rOutput, RTL_TEXTENCODING_ASCII_US ), STREAM_STD_WRITE | STREAM_TRUNC );
484cdf0e10cSrcweir aOutput.SetStreamCharSet( RTL_TEXTENCODING_UTF8 );
485cdf0e10cSrcweir aOutput.SetLineDelimiter( LINEEND_CRLF );
486cdf0e10cSrcweir }
487cdf0e10cSrcweir
488cdf0e10cSrcweir }
489cdf0e10cSrcweir
490cdf0e10cSrcweir /*****************************************************************************/
Init()491cdf0e10cSrcweir void Export::Init()
492cdf0e10cSrcweir /*****************************************************************************/
493cdf0e10cSrcweir {
494cdf0e10cSrcweir // resets the internal status, used before parseing another file
495cdf0e10cSrcweir sActPForm = "";
496cdf0e10cSrcweir bDefine = sal_False;
497cdf0e10cSrcweir bNextMustBeDefineEOL = sal_False;
498cdf0e10cSrcweir nLevel = 0;
499cdf0e10cSrcweir nList = LIST_NON;
500cdf0e10cSrcweir nListLang = ByteString( String::CreateFromAscii(""),RTL_TEXTENCODING_ASCII_US );
501cdf0e10cSrcweir nListIndex = 0;
502cdf0e10cSrcweir while ( aResStack.Count()) {
503cdf0e10cSrcweir delete aResStack.GetObject(( sal_uLong ) 0 );
504cdf0e10cSrcweir aResStack.Remove(( sal_uLong ) 0 );
505cdf0e10cSrcweir }
506cdf0e10cSrcweir }
507cdf0e10cSrcweir
508cdf0e10cSrcweir /*****************************************************************************/
~Export()509cdf0e10cSrcweir Export::~Export()
510cdf0e10cSrcweir /*****************************************************************************/
511cdf0e10cSrcweir {
512cdf0e10cSrcweir if( pParseQueue )
513cdf0e10cSrcweir delete pParseQueue;
514cdf0e10cSrcweir // close output stream
515cdf0e10cSrcweir if ( bEnableExport )
516cdf0e10cSrcweir aOutput.Close();
517cdf0e10cSrcweir while ( aResStack.Count()) {
518cdf0e10cSrcweir delete aResStack.GetObject(( sal_uLong ) 0 );
519cdf0e10cSrcweir aResStack.Remove(( sal_uLong ) 0 );
520cdf0e10cSrcweir }
521cdf0e10cSrcweir
522cdf0e10cSrcweir if ( bMergeMode && !bUnmerge ) {
523cdf0e10cSrcweir if ( !pMergeDataFile )
524cdf0e10cSrcweir pMergeDataFile = new MergeDataFile( sMergeSrc,sFile , bErrorLog, aCharSet);//, bUTF8 );
525cdf0e10cSrcweir
526cdf0e10cSrcweir //pMergeDataFile->WriteErrorLog( sActFileName );
527cdf0e10cSrcweir delete pMergeDataFile;
528cdf0e10cSrcweir }
529cdf0e10cSrcweir }
530cdf0e10cSrcweir
531cdf0e10cSrcweir /*****************************************************************************/
Execute(int nToken,const char * pToken)532cdf0e10cSrcweir int Export::Execute( int nToken, const char * pToken )
533cdf0e10cSrcweir /*****************************************************************************/
534cdf0e10cSrcweir {
535cdf0e10cSrcweir
536cdf0e10cSrcweir ByteString sToken( pToken );
537cdf0e10cSrcweir ByteString sOrig( sToken );
538cdf0e10cSrcweir /* printf("+---------------\n");
539cdf0e10cSrcweir printf("sToken = %s\n",sToken.GetBuffer());
540cdf0e10cSrcweir printf("nToken = %d\n",nToken);
541cdf0e10cSrcweir printf("+---------------\n"); */
542cdf0e10cSrcweir sal_Bool bWriteToMerged = bMergeMode;
543cdf0e10cSrcweir
544cdf0e10cSrcweir if ( nToken == CONDITION ) {
545cdf0e10cSrcweir ByteString sTestToken( pToken );
546cdf0e10cSrcweir sTestToken.EraseAllChars( '\t' );
547cdf0e10cSrcweir sTestToken.EraseAllChars( ' ' );
548cdf0e10cSrcweir if (( !bReadOver ) && ( sTestToken.Search( "#ifndef__RSC_PARSER" ) == 0 ))
549cdf0e10cSrcweir bReadOver = sal_True;
550cdf0e10cSrcweir else if (( bReadOver ) && ( sTestToken.Search( "#endif" ) == 0 ))
551cdf0e10cSrcweir bReadOver = sal_False;
552cdf0e10cSrcweir }
553cdf0e10cSrcweir if ((( nToken < FILTER_LEVEL ) || ( bReadOver )) &&
554cdf0e10cSrcweir (!(( bNextMustBeDefineEOL ) && ( sOrig == "\n" )))) {
555cdf0e10cSrcweir // this tokens are not mandatory for parsing, so ignore them ...
556cdf0e10cSrcweir if ( bMergeMode )
557cdf0e10cSrcweir WriteToMerged( sOrig , false ); // ... ore whrite them directly to dest.
558cdf0e10cSrcweir return 0;
559cdf0e10cSrcweir }
560cdf0e10cSrcweir
561cdf0e10cSrcweir ResData *pResData = NULL;
562cdf0e10cSrcweir if ( nLevel ) {
563cdf0e10cSrcweir // res. exists at cur. level
564cdf0e10cSrcweir pResData = aResStack.GetObject( nLevel-1 );
565cdf0e10cSrcweir }
566cdf0e10cSrcweir else if (( nToken != RESSOURCE ) &&
567cdf0e10cSrcweir ( nToken != RESSOURCEEXPR ) &&
568cdf0e10cSrcweir ( nToken != SMALRESSOURCE ) &&
569cdf0e10cSrcweir ( nToken != LEVELUP ) &&
570cdf0e10cSrcweir ( nToken != NORMDEFINE ) &&
571cdf0e10cSrcweir ( nToken != RSCDEFINE ) &&
572cdf0e10cSrcweir ( nToken != CONDITION ) &&
573cdf0e10cSrcweir ( nToken != PRAGMA ))
574cdf0e10cSrcweir {
575cdf0e10cSrcweir // no res. exists at cur. level so return
576cdf0e10cSrcweir if ( bMergeMode )
577cdf0e10cSrcweir WriteToMerged( sOrig , false );
578cdf0e10cSrcweir return 0;
579cdf0e10cSrcweir }
580cdf0e10cSrcweir // #define NO_LOCALIZE_EXPORT
581cdf0e10cSrcweir if( bSkipFile ){
582cdf0e10cSrcweir if ( bMergeMode ) {
583cdf0e10cSrcweir WriteToMerged( sOrig , false );
584cdf0e10cSrcweir }
585cdf0e10cSrcweir return 1;
586cdf0e10cSrcweir }
587cdf0e10cSrcweir
588cdf0e10cSrcweir
589cdf0e10cSrcweir if ( bDefine ) {
590cdf0e10cSrcweir if (( nToken != EMPTYLINE ) && ( nToken != LEVELDOWN ) && ( nToken != LEVELUP )) {
591cdf0e10cSrcweir // cur. res. defined in macro
592cdf0e10cSrcweir if ( bNextMustBeDefineEOL ) {
593cdf0e10cSrcweir if ( nToken != RSCDEFINELEND ) {
594cdf0e10cSrcweir // end of macro found, so destroy res.
595cdf0e10cSrcweir bDefine = sal_False;
596cdf0e10cSrcweir if ( bMergeMode ) {
597cdf0e10cSrcweir /*if ( bDontWriteOutput && bUnmerge ) {
598cdf0e10cSrcweir bDontWriteOutput = sal_False;
599cdf0e10cSrcweir bNextMustBeDefineEOL = sal_False;
600cdf0e10cSrcweir bDefine = sal_True;
601cdf0e10cSrcweir }*/
602cdf0e10cSrcweir MergeRest( pResData );
603cdf0e10cSrcweir }
604cdf0e10cSrcweir bNextMustBeDefineEOL = sal_False;
605cdf0e10cSrcweir Execute( LEVELDOWN, "" );
606cdf0e10cSrcweir }
607cdf0e10cSrcweir else {
608cdf0e10cSrcweir // next line also in macro definition
609cdf0e10cSrcweir bNextMustBeDefineEOL = sal_False;
610cdf0e10cSrcweir if ( bMergeMode )
611cdf0e10cSrcweir WriteToMerged( sOrig , false );
612cdf0e10cSrcweir return 1;
613cdf0e10cSrcweir }
614cdf0e10cSrcweir }
615cdf0e10cSrcweir else if (( nToken != LISTASSIGNMENT ) && ( nToken != UIENTRIES )){
616cdf0e10cSrcweir // cur. line has macro line end
617cdf0e10cSrcweir ByteString sTmpLine( sToken );
618cdf0e10cSrcweir sTmpLine.EraseAllChars( '\t' ); sTmpLine.EraseAllChars( ' ' );
619cdf0e10cSrcweir #if 0
620cdf0e10cSrcweir // impossible, unsigned is never negative
621cdf0e10cSrcweir if( sTmpLine.Len() < 0 ){
622cdf0e10cSrcweir if ( sTmpLine.GetChar(( sal_uInt16 )( sTmpLine.Len() - 1 )) != '\\' )
623cdf0e10cSrcweir bNextMustBeDefineEOL = sal_True;
624cdf0e10cSrcweir }
625cdf0e10cSrcweir #endif
626cdf0e10cSrcweir }
627cdf0e10cSrcweir }
628cdf0e10cSrcweir }
629cdf0e10cSrcweir
630cdf0e10cSrcweir sal_Bool bExecuteDown = sal_False;
631cdf0e10cSrcweir if ( nToken != LEVELDOWN ) {
632cdf0e10cSrcweir sal_uInt16 nOpen = 0;
633cdf0e10cSrcweir sal_uInt16 nClose = 0;
634cdf0e10cSrcweir sal_Bool bReadOver1 = sal_False;
635cdf0e10cSrcweir sal_uInt16 i = 0;
636cdf0e10cSrcweir for ( i = 0; i < sToken.Len(); i++ ) {
637cdf0e10cSrcweir if ( sToken.GetChar( i ) == '\"' )
638cdf0e10cSrcweir bReadOver1 = !bReadOver1;
639cdf0e10cSrcweir if ( !bReadOver1 && ( sToken.GetChar( i ) == '{' ))
640cdf0e10cSrcweir nOpen++;
641cdf0e10cSrcweir }
642cdf0e10cSrcweir
643cdf0e10cSrcweir bReadOver1 = sal_False;
644cdf0e10cSrcweir for ( i = 0; i < sToken.Len(); i++ ) {
645cdf0e10cSrcweir if ( sToken.GetChar( i ) == '\"' )
646cdf0e10cSrcweir bReadOver1 = !bReadOver1;
647cdf0e10cSrcweir if ( !bReadOver1 && ( sToken.GetChar( i ) == '}' ))
648cdf0e10cSrcweir nClose++;
649cdf0e10cSrcweir }
650cdf0e10cSrcweir
651cdf0e10cSrcweir if ( nOpen < nClose )
652cdf0e10cSrcweir bExecuteDown = sal_True;
653cdf0e10cSrcweir }
654cdf0e10cSrcweir switch ( nToken ) {
655cdf0e10cSrcweir
656cdf0e10cSrcweir case NORMDEFINE:
657cdf0e10cSrcweir //printf("sToken = '%s'",sToken.GetBuffer());
658cdf0e10cSrcweir while( sToken.SearchAndReplace( "\r", " " ) != STRING_NOTFOUND ) {};
659cdf0e10cSrcweir while( sToken.SearchAndReplace( "\t", " " ) != STRING_NOTFOUND ) {};
660cdf0e10cSrcweir while( sToken.SearchAndReplace( " ", " " ) != STRING_NOTFOUND ) {};
661cdf0e10cSrcweir if( sToken.EqualsIgnoreCaseAscii( "#define NO_LOCALIZE_EXPORT" ) ){
662cdf0e10cSrcweir bSkipFile = true;
663cdf0e10cSrcweir return 0;
664cdf0e10cSrcweir }
665cdf0e10cSrcweir if ( bMergeMode )
666cdf0e10cSrcweir WriteToMerged( sOrig , false );
667cdf0e10cSrcweir
668cdf0e10cSrcweir return 0;
669cdf0e10cSrcweir
670cdf0e10cSrcweir
671cdf0e10cSrcweir case RSCDEFINE:
672cdf0e10cSrcweir bDefine = sal_True; // res. defined in macro
673cdf0e10cSrcweir
674cdf0e10cSrcweir case RESSOURCE:
675cdf0e10cSrcweir case RESSOURCEEXPR: {
676cdf0e10cSrcweir bDontWriteOutput = sal_False;
677cdf0e10cSrcweir if ( nToken != RSCDEFINE )
678cdf0e10cSrcweir bNextMustBeDefineEOL = sal_False;
679cdf0e10cSrcweir // this is the beginning of a new res.
680cdf0e10cSrcweir nLevel++;
681cdf0e10cSrcweir if ( nLevel > 1 ) {
682cdf0e10cSrcweir aResStack.GetObject( nLevel - 2 )->bChild = sal_True;
683cdf0e10cSrcweir }
684cdf0e10cSrcweir
685cdf0e10cSrcweir // create new instance for this res. and fill mandatory fields
686cdf0e10cSrcweir
687cdf0e10cSrcweir pResData = new ResData( sActPForm, FullId() , sFilename );
688cdf0e10cSrcweir aResStack.Insert( pResData, LIST_APPEND );
689cdf0e10cSrcweir ByteString sBackup( sToken );
690cdf0e10cSrcweir sToken.EraseAllChars( '\n' );
691cdf0e10cSrcweir sToken.EraseAllChars( '\r' );
692cdf0e10cSrcweir sToken.EraseAllChars( '{' );
693cdf0e10cSrcweir while( sToken.SearchAndReplace( "\t", " " ) != STRING_NOTFOUND ) {};
694cdf0e10cSrcweir sToken.EraseTrailingChars( ' ' );
695cdf0e10cSrcweir ByteString sT = sToken.GetToken( 0, ' ' );
696cdf0e10cSrcweir pResData->sResTyp = sT.ToLowerAscii();
697cdf0e10cSrcweir ByteString sId( sToken.Copy( pResData->sResTyp.Len() + 1 ));
698cdf0e10cSrcweir ByteString sCondition;
699cdf0e10cSrcweir if ( sId.Search( "#" ) != STRING_NOTFOUND ) {
700cdf0e10cSrcweir // between ResTyp, Id and paranthes is a precomp. condition
701cdf0e10cSrcweir sCondition = "#";
702cdf0e10cSrcweir sCondition += sId.GetToken( 1, '#' );
703cdf0e10cSrcweir sId = sId.GetToken( 0, '#' );
704cdf0e10cSrcweir }
705cdf0e10cSrcweir sId = sId.GetToken( 0, '/' );
706cdf0e10cSrcweir CleanValue( sId );
707cdf0e10cSrcweir sId = sId.EraseAllChars( '\t' );
708cdf0e10cSrcweir pResData->SetId( sId, ID_LEVEL_IDENTIFIER );
709cdf0e10cSrcweir if ( sCondition.Len()) {
710cdf0e10cSrcweir ByteString sEmpty( "" );
711cdf0e10cSrcweir Execute( CONDITION, sEmpty.GetBufferAccess()); // execute the
712cdf0e10cSrcweir // precomp.
713cdf0e10cSrcweir // condition
714cdf0e10cSrcweir sEmpty.ReleaseBufferAccess();
715cdf0e10cSrcweir }
716cdf0e10cSrcweir }
717cdf0e10cSrcweir break;
718cdf0e10cSrcweir case SMALRESSOURCE: {
719cdf0e10cSrcweir bDontWriteOutput = sal_False;
720cdf0e10cSrcweir // this is the beginning of a new res.
721cdf0e10cSrcweir bNextMustBeDefineEOL = sal_False;
722cdf0e10cSrcweir nLevel++;
723cdf0e10cSrcweir if ( nLevel > 1 ) {
724cdf0e10cSrcweir aResStack.GetObject( nLevel - 2 )->bChild = sal_True;
725cdf0e10cSrcweir }
726cdf0e10cSrcweir
727cdf0e10cSrcweir // create new instance for this res. and fill mandatory fields
728cdf0e10cSrcweir
729cdf0e10cSrcweir pResData = new ResData( sActPForm, FullId() , sFilename );
730cdf0e10cSrcweir aResStack.Insert( pResData, LIST_APPEND );
731cdf0e10cSrcweir sToken.EraseAllChars( '\n' );
732cdf0e10cSrcweir sToken.EraseAllChars( '\r' );
733cdf0e10cSrcweir sToken.EraseAllChars( '{' );
734cdf0e10cSrcweir sToken.EraseAllChars( '\t' );
735cdf0e10cSrcweir sToken.EraseAllChars( ' ' );
736cdf0e10cSrcweir sToken.EraseAllChars( '\\' );
737cdf0e10cSrcweir pResData->sResTyp = sToken.ToLowerAscii();
738cdf0e10cSrcweir }
739cdf0e10cSrcweir break;
740cdf0e10cSrcweir case LEVELUP: {
741cdf0e10cSrcweir // push
742cdf0e10cSrcweir if ( nList )
743cdf0e10cSrcweir nListLevel++;
744cdf0e10cSrcweir if ( nList )
745cdf0e10cSrcweir break;
746cdf0e10cSrcweir
747cdf0e10cSrcweir bDontWriteOutput = sal_False;
748cdf0e10cSrcweir ByteString sLowerTyp;
749cdf0e10cSrcweir if ( pResData )
750cdf0e10cSrcweir sLowerTyp = "unknown";
751cdf0e10cSrcweir nLevel++;
752cdf0e10cSrcweir if ( nLevel > 1 ) {
753cdf0e10cSrcweir aResStack.GetObject( nLevel - 2 )->bChild = sal_True;
754cdf0e10cSrcweir }
755cdf0e10cSrcweir
756cdf0e10cSrcweir ResData *pNewData = new ResData( sActPForm, FullId() , sFilename );
757cdf0e10cSrcweir pNewData->sResTyp = sLowerTyp;
758cdf0e10cSrcweir aResStack.Insert( pNewData, LIST_APPEND );
759cdf0e10cSrcweir }
760cdf0e10cSrcweir break;
761cdf0e10cSrcweir case LEVELDOWN: {
762cdf0e10cSrcweir // pop
763cdf0e10cSrcweir if ( !nList ) {
764cdf0e10cSrcweir bDontWriteOutput = sal_False;
765cdf0e10cSrcweir if ( nLevel ) {
766cdf0e10cSrcweir if ( bDefine && (nLevel == 1 )) {
767cdf0e10cSrcweir bDefine = sal_False;
768cdf0e10cSrcweir bNextMustBeDefineEOL = sal_False;
769cdf0e10cSrcweir }
770cdf0e10cSrcweir WriteData( pResData );
771cdf0e10cSrcweir delete aResStack.GetObject( nLevel - 1 );
772cdf0e10cSrcweir aResStack.Remove( nLevel - 1 );
773cdf0e10cSrcweir nLevel--;
774cdf0e10cSrcweir }
775cdf0e10cSrcweir }
776cdf0e10cSrcweir else {
777cdf0e10cSrcweir if ( bDefine )
778cdf0e10cSrcweir bNextMustBeDefineEOL = sal_True;
779cdf0e10cSrcweir if ( !nListLevel ) {
780cdf0e10cSrcweir if ( bMergeMode )
781cdf0e10cSrcweir MergeRest( pResData, MERGE_MODE_LIST );
782cdf0e10cSrcweir nList = LIST_NON;
783cdf0e10cSrcweir }
784cdf0e10cSrcweir else
785cdf0e10cSrcweir nListLevel--;
786cdf0e10cSrcweir }
787cdf0e10cSrcweir }
788cdf0e10cSrcweir break;
789cdf0e10cSrcweir case ASSIGNMENT: {
790cdf0e10cSrcweir bDontWriteOutput = sal_False;
791cdf0e10cSrcweir // interpret different types of assignement
792cdf0e10cSrcweir ByteString sKey = sToken.GetToken( 0, '=' );
793cdf0e10cSrcweir sKey.EraseAllChars( ' ' );
794cdf0e10cSrcweir sKey.EraseAllChars( '\t' );
795cdf0e10cSrcweir ByteString sValue = sToken.GetToken( 1, '=' );
796cdf0e10cSrcweir CleanValue( sValue );
797cdf0e10cSrcweir if ( sKey.ToUpperAscii() == "IDENTIFIER" ) {
798cdf0e10cSrcweir ByteString sId( sValue.EraseAllChars( '\t' ));
799cdf0e10cSrcweir pResData->SetId( sId.EraseAllChars( ' ' ), ID_LEVEL_IDENTIFIER );
800cdf0e10cSrcweir }
801cdf0e10cSrcweir else if ( sKey == "HELPID" ) {
802cdf0e10cSrcweir pResData->sHelpId = sValue;
803cdf0e10cSrcweir }
804cdf0e10cSrcweir else if ( sKey == "STRINGLIST" ) {
805cdf0e10cSrcweir //if ( bUnmerge ){
806cdf0e10cSrcweir // ( sOrig.SearchAndReplace( "=", "[ de ] =" ));
807cdf0e10cSrcweir //}
808cdf0e10cSrcweir
809cdf0e10cSrcweir pResData->bList = sal_True;
810cdf0e10cSrcweir nList = LIST_STRING;
811cdf0e10cSrcweir //ByteString sLang("en-US" , RTL_TEXTENCODING_ASCII_US );
812cdf0e10cSrcweir nListLang = SOURCE_LANGUAGE;
813cdf0e10cSrcweir nListIndex = 0;
814cdf0e10cSrcweir nListLevel = 0;
815cdf0e10cSrcweir }
816cdf0e10cSrcweir else if ( sKey == "FILTERLIST" ) {
817cdf0e10cSrcweir //if ( bUnmerge ){
818cdf0e10cSrcweir // ( sOrig.SearchAndReplace( "=", "[ de ] =" ));
819cdf0e10cSrcweir //}
820cdf0e10cSrcweir pResData->bList = sal_True;
821cdf0e10cSrcweir nList = LIST_FILTER;
822cdf0e10cSrcweir //ByteString sLang("en-US" , RTL_TEXTENCODING_ASCII_US );
823cdf0e10cSrcweir nListLang = SOURCE_LANGUAGE;
824cdf0e10cSrcweir nListIndex = 0;
825cdf0e10cSrcweir nListLevel = 0;
826cdf0e10cSrcweir }
827cdf0e10cSrcweir else if ( sKey == "UIENTRIES" ) {
828cdf0e10cSrcweir //if ( bUnmerge ){
829cdf0e10cSrcweir // ( sOrig.SearchAndReplace( "=", "[ de ] =" ));}
830cdf0e10cSrcweir pResData->bList = sal_True;
831cdf0e10cSrcweir nList = LIST_UIENTRIES;
832cdf0e10cSrcweir //ByteString sLang("en-US" , RTL_TEXTENCODING_ASCII_US );
833cdf0e10cSrcweir nListLang = SOURCE_LANGUAGE;
834cdf0e10cSrcweir nListIndex = 0;
835cdf0e10cSrcweir nListLevel = 0;
836cdf0e10cSrcweir }
837cdf0e10cSrcweir if (( sToken.Search( "{" ) != STRING_NOTFOUND ) &&
838cdf0e10cSrcweir ( sToken.GetTokenCount( '{' ) > sToken.GetTokenCount( '}' )))
839cdf0e10cSrcweir {
840cdf0e10cSrcweir //WorkOnTokenSet( LEVELUP, pTkn );
841cdf0e10cSrcweir Parse( LEVELUP, "" );
842cdf0e10cSrcweir }
843cdf0e10cSrcweir //if ( bUnmerge && ( nListLang.EqualsIgnoreCaseAscii("de") || nListLang.EqualsIgnoreCaseAscii("en-US") ) && ListExists( pResData, nList ))
844cdf0e10cSrcweir // bDontWriteOutput = sal_True;
845cdf0e10cSrcweir }
846cdf0e10cSrcweir break;
847cdf0e10cSrcweir case UIENTRIES:
848cdf0e10cSrcweir case LISTASSIGNMENT: {
849cdf0e10cSrcweir bDontWriteOutput = sal_False;
850cdf0e10cSrcweir ByteString sTmpToken( sToken);
851cdf0e10cSrcweir sTmpToken.EraseAllChars(' ');
852cdf0e10cSrcweir sal_uInt16 nPos = 0;
853cdf0e10cSrcweir //nPos = sTmpToken.ToLowerAscii().Search("[de]=");
854cdf0e10cSrcweir nPos = sTmpToken.ToLowerAscii().Search("[en-us]=");
855cdf0e10cSrcweir if( nPos != STRING_NOTFOUND ) {
856cdf0e10cSrcweir //if ( bUnmerge ){
857cdf0e10cSrcweir // ( sOrig.SearchAndReplace( "=", "[ de ] =" ));
858cdf0e10cSrcweir //}
859cdf0e10cSrcweir ByteString sKey = sTmpToken.Copy( 0 , nPos );
860cdf0e10cSrcweir sKey.EraseAllChars( ' ' );
861cdf0e10cSrcweir sKey.EraseAllChars( '\t' );
862cdf0e10cSrcweir ByteString sValue = sToken.GetToken( 1, '=' );
863cdf0e10cSrcweir CleanValue( sValue );
864cdf0e10cSrcweir if ( sKey.ToUpperAscii() == "STRINGLIST" ) {
865cdf0e10cSrcweir pResData->bList = sal_True;
866cdf0e10cSrcweir nList = LIST_STRING;
867cdf0e10cSrcweir //ByteString sLang("en-US" , RTL_TEXTENCODING_ASCII_US );
868cdf0e10cSrcweir nListLang = SOURCE_LANGUAGE;
869cdf0e10cSrcweir nListIndex = 0;
870cdf0e10cSrcweir nListLevel = 0;
871cdf0e10cSrcweir }
872cdf0e10cSrcweir else if ( sKey == "FILTERLIST" ) {
873cdf0e10cSrcweir pResData->bList = sal_True;
874cdf0e10cSrcweir nList = LIST_FILTER;
875cdf0e10cSrcweir //ByteString sLang("en-US" , RTL_TEXTENCODING_ASCII_US );
876cdf0e10cSrcweir nListLang = SOURCE_LANGUAGE;
877cdf0e10cSrcweir nListIndex = 0;
878cdf0e10cSrcweir nListLevel = 0;
879cdf0e10cSrcweir }
880cdf0e10cSrcweir // PairedList
881cdf0e10cSrcweir else if ( sKey == "PAIREDLIST" ) {
882cdf0e10cSrcweir pResData->bList = sal_True;
883cdf0e10cSrcweir nList = LIST_PAIRED;
884cdf0e10cSrcweir //ByteString sLang("en-US" , RTL_TEXTENCODING_ASCII_US );
885cdf0e10cSrcweir nListLang = SOURCE_LANGUAGE;
886cdf0e10cSrcweir nListIndex = 0;
887cdf0e10cSrcweir nListLevel = 0;
888cdf0e10cSrcweir }
889cdf0e10cSrcweir
890cdf0e10cSrcweir else if ( sKey == "ITEMLIST" ) {
891cdf0e10cSrcweir pResData->bList = sal_True;
892cdf0e10cSrcweir nList = LIST_ITEM;
893cdf0e10cSrcweir //ByteString sLang("en-US" , RTL_TEXTENCODING_ASCII_US );
894cdf0e10cSrcweir nListLang = SOURCE_LANGUAGE;
895cdf0e10cSrcweir nListIndex = 0;
896cdf0e10cSrcweir nListLevel = 0;
897cdf0e10cSrcweir }
898cdf0e10cSrcweir else if ( sKey == "UIENTRIES" ) {
899cdf0e10cSrcweir pResData->bList = sal_True;
900cdf0e10cSrcweir nList = LIST_UIENTRIES;
901cdf0e10cSrcweir //ByteString sLang("en-US" , RTL_TEXTENCODING_ASCII_US );
902cdf0e10cSrcweir nListLang = SOURCE_LANGUAGE;
903cdf0e10cSrcweir nListIndex = 0;
904cdf0e10cSrcweir nListLevel = 0;
905cdf0e10cSrcweir }
906cdf0e10cSrcweir /*if ( bUnmerge && ( nListLang.EqualsIgnoreCaseAscii( "de" )
907cdf0e10cSrcweir || nListLang.EqualsIgnoreCaseAscii("en-US" ) )
908cdf0e10cSrcweir && ListExists( pResData, nList ))
909cdf0e10cSrcweir bDontWriteOutput = sal_True;*/
910cdf0e10cSrcweir }
911cdf0e10cSrcweir else {
912cdf0e10cSrcweir // new res. is a String- or FilterList
913cdf0e10cSrcweir ByteString sKey = sToken.GetToken( 0, '[' );
914cdf0e10cSrcweir sKey.EraseAllChars( ' ' );
915cdf0e10cSrcweir sKey.EraseAllChars( '\t' );
916cdf0e10cSrcweir if ( sKey.ToUpperAscii() == "STRINGLIST" )
917cdf0e10cSrcweir nList = LIST_STRING;
918cdf0e10cSrcweir else if ( sKey == "FILTERLIST" )
919cdf0e10cSrcweir nList = LIST_FILTER;
920cdf0e10cSrcweir else if ( sKey == "PAIREDLIST" )
921cdf0e10cSrcweir nList = LIST_PAIRED; // abcd
922cdf0e10cSrcweir else if ( sKey == "ITEMLIST" )
923cdf0e10cSrcweir nList = LIST_ITEM;
924cdf0e10cSrcweir else if ( sKey == "UIENTRIES" )
925cdf0e10cSrcweir nList = LIST_UIENTRIES;
926cdf0e10cSrcweir if ( nList ) {
927cdf0e10cSrcweir ByteString sLang=sToken.GetToken( 1, '[' ).GetToken( 0, ']' );
928cdf0e10cSrcweir CleanValue( sLang );
929cdf0e10cSrcweir nListLang = sLang;
930cdf0e10cSrcweir /*if (( bUnmerge ) && ( !nListLang.EqualsIgnoreCaseAscii("de")) && ( !nListLang.EqualsIgnoreCaseAscii("en-US")))
931cdf0e10cSrcweir bDontWriteOutput = sal_True;*/
932cdf0e10cSrcweir nListIndex = 0;
933cdf0e10cSrcweir nListLevel = 0;
934cdf0e10cSrcweir /*if ( bUnmerge && nListLang.EqualsIgnoreCaseAscii("de") && ListExists( pResData, nList ) )
935cdf0e10cSrcweir bDontWriteOutput = sal_True;*/
936cdf0e10cSrcweir }
937cdf0e10cSrcweir }
938cdf0e10cSrcweir }
939cdf0e10cSrcweir break;
940cdf0e10cSrcweir case TEXT:
941cdf0e10cSrcweir case _LISTTEXT:
942cdf0e10cSrcweir case LISTTEXT: {
943cdf0e10cSrcweir // this is an entry for a String- or FilterList
944cdf0e10cSrcweir if ( nList ) {
945cdf0e10cSrcweir SetChildWithText();
946cdf0e10cSrcweir ByteString sEntry( sToken.GetToken( 1, '\"' ));
947cdf0e10cSrcweir if ( sToken.GetTokenCount( '\"' ) > 3 )
948cdf0e10cSrcweir sEntry += "\"";
949cdf0e10cSrcweir if ( sEntry == "\\\"" )
950cdf0e10cSrcweir sEntry = "\"";
951cdf0e10cSrcweir //sEntry = sEntry.Convert( aCharSet, RTL_TEXTENCODING_MS_1252 );
952cdf0e10cSrcweir //sEntry = sEntry.Convert( RTL_TEXTENCODING_MS_1252, RTL_TEXTENCODING_UTF8 );
953cdf0e10cSrcweir InsertListEntry( sEntry, sOrig );
954cdf0e10cSrcweir if ( bMergeMode && ( sEntry != "\"" )) {
955cdf0e10cSrcweir PrepareTextToMerge( sOrig, nList, nListLang, pResData );
956cdf0e10cSrcweir }
957cdf0e10cSrcweir }
958cdf0e10cSrcweir }
959cdf0e10cSrcweir break;
960cdf0e10cSrcweir case LONGTEXTLINE:
961cdf0e10cSrcweir case TEXTLINE:
962cdf0e10cSrcweir bDontWriteOutput = sal_False;
963cdf0e10cSrcweir if ( nLevel ) {
964cdf0e10cSrcweir CutComment( sToken );
965cdf0e10cSrcweir
966cdf0e10cSrcweir // this is a text line!!!
967cdf0e10cSrcweir ByteString sKey = sToken.GetToken( 0, '=' ).GetToken( 0, '[' );
968cdf0e10cSrcweir sKey.EraseAllChars( ' ' );
969cdf0e10cSrcweir sKey.EraseAllChars( '\t' );
970cdf0e10cSrcweir ByteString sText( GetText( sToken, nToken ));
971cdf0e10cSrcweir if ( !bMergeMode )
972cdf0e10cSrcweir sText = sText.Convert( aCharSet, RTL_TEXTENCODING_MS_1252 );
973cdf0e10cSrcweir ByteString sLang;
974cdf0e10cSrcweir if ( sToken.GetToken( 0, '=' ).Search( "[" ) != STRING_NOTFOUND ) {
975cdf0e10cSrcweir sLang = sToken.GetToken( 0, '=' ).GetToken( 1, '[' ).GetToken( 0, ']' );
976cdf0e10cSrcweir CleanValue( sLang );
977cdf0e10cSrcweir }
978cdf0e10cSrcweir ByteString nLangIndex = sLang;
979cdf0e10cSrcweir ByteString sOrigKey = sKey;
980cdf0e10cSrcweir if ( sText.Len() && sLang.Len() ) {
981cdf0e10cSrcweir if (( sKey.ToUpperAscii() == "TEXT" ) ||
982cdf0e10cSrcweir ( sKey == "MESSAGE" ) ||
983cdf0e10cSrcweir ( sKey == "CUSTOMUNITTEXT" ) ||
984cdf0e10cSrcweir ( sKey == "SLOTNAME" ) ||
985cdf0e10cSrcweir ( sKey == "UINAME" ))
986cdf0e10cSrcweir {
987cdf0e10cSrcweir //if ( bUnmerge && sToken.GetToken( 0, '=' ).Search( "[" ) == STRING_NOTFOUND )
988cdf0e10cSrcweir // ( sOrig.SearchAndReplace( "=", "[ de ] =" ));
989cdf0e10cSrcweir
990cdf0e10cSrcweir SetChildWithText();
991cdf0e10cSrcweir //if ( nLangIndex.EqualsIgnoreCaseAscii("en-US") )
992cdf0e10cSrcweir if ( Export::isSourceLanguage( nLangIndex ) )
993cdf0e10cSrcweir pResData->SetId( sText, ID_LEVEL_TEXT );
994cdf0e10cSrcweir
995cdf0e10cSrcweir pResData->bText = sal_True;
996cdf0e10cSrcweir pResData->sTextTyp = sOrigKey;
997cdf0e10cSrcweir if ( bMergeMode ) {
998cdf0e10cSrcweir PrepareTextToMerge( sOrig, STRING_TYP_TEXT, nLangIndex, pResData );
999cdf0e10cSrcweir //if ( bUnmerge )
1000cdf0e10cSrcweir // pResData->sText[ nLangIndex ] = sText;
1001cdf0e10cSrcweir }
1002cdf0e10cSrcweir else {
1003cdf0e10cSrcweir if ( pResData->sText[ nLangIndex ].Len()) {
1004cdf0e10cSrcweir ByteString sError( "Language " );
1005cdf0e10cSrcweir sError += nLangIndex;
1006cdf0e10cSrcweir sError += " defined twice";
1007cdf0e10cSrcweir }
1008cdf0e10cSrcweir pResData->sText[ nLangIndex ] = sText;
1009cdf0e10cSrcweir }
1010cdf0e10cSrcweir }
1011cdf0e10cSrcweir else if ( sKey == "HELPTEXT" ) {
1012cdf0e10cSrcweir //if ( bUnmerge && sToken.GetToken( 0, '=' ).Search( "[" ) == STRING_NOTFOUND ){
1013cdf0e10cSrcweir // ( sOrig.SearchAndReplace( "=", "[ de ] =" ));
1014cdf0e10cSrcweir // }
1015cdf0e10cSrcweir SetChildWithText();
1016cdf0e10cSrcweir pResData->bHelpText = sal_True;
1017cdf0e10cSrcweir if ( bBreakWhenHelpText ) {
1018cdf0e10cSrcweir ByteString sError( "\"HelpText\" found in source\n" );
1019cdf0e10cSrcweir YYWarning( sError.GetBufferAccess());
1020cdf0e10cSrcweir sError.ReleaseBufferAccess();
1021cdf0e10cSrcweir SetError();
1022cdf0e10cSrcweir }
1023cdf0e10cSrcweir if ( bMergeMode )
1024cdf0e10cSrcweir PrepareTextToMerge( sOrig, STRING_TYP_HELPTEXT, nLangIndex, pResData );
1025cdf0e10cSrcweir //if ( bUnmerge )
1026cdf0e10cSrcweir // pResData->sHelpText[ nLangIndex ] = sText;
1027cdf0e10cSrcweir else {
1028cdf0e10cSrcweir if ( pResData->sHelpText[ nLangIndex ].Len()) {
1029cdf0e10cSrcweir ByteString sError( "Language " );
1030cdf0e10cSrcweir sError += nLangIndex;
1031cdf0e10cSrcweir sError += " defined twice";
1032cdf0e10cSrcweir }
1033cdf0e10cSrcweir pResData->sHelpText[ nLangIndex ] = sText;
1034cdf0e10cSrcweir }
1035cdf0e10cSrcweir }
1036cdf0e10cSrcweir else if ( sKey == "QUICKHELPTEXT" ) {
1037cdf0e10cSrcweir //if ( bUnmerge && sToken.GetToken( 0, '=' ).Search( "[" ) == STRING_NOTFOUND ){
1038cdf0e10cSrcweir // ( sOrig.SearchAndReplace( "=", "[ de ] =" ));
1039cdf0e10cSrcweir // }
1040cdf0e10cSrcweir SetChildWithText();
1041cdf0e10cSrcweir pResData->bQuickHelpText = sal_True;
1042cdf0e10cSrcweir if ( bMergeMode )
1043cdf0e10cSrcweir PrepareTextToMerge( sOrig, STRING_TYP_QUICKHELPTEXT, nLangIndex, pResData );
1044cdf0e10cSrcweir //if ( bUnmerge )
1045cdf0e10cSrcweir // pResData->sQuickHelpText[ nLangIndex ] = sText;
1046cdf0e10cSrcweir else {
1047cdf0e10cSrcweir if ( pResData->sQuickHelpText[ nLangIndex ].Len()) {
1048cdf0e10cSrcweir ByteString sError( "Language " );
1049cdf0e10cSrcweir sError += nLangIndex;
1050cdf0e10cSrcweir sError += " defined twice";
1051cdf0e10cSrcweir }
1052cdf0e10cSrcweir pResData->sQuickHelpText[ nLangIndex ] = sText;
1053cdf0e10cSrcweir }
1054cdf0e10cSrcweir }
1055cdf0e10cSrcweir else if ( sKey == "TITLE" ) {
1056cdf0e10cSrcweir //if ( bUnmerge && sToken.GetToken( 0, '=' ).Search( "[" ) == STRING_NOTFOUND ){
1057cdf0e10cSrcweir // ( sOrig.SearchAndReplace( "=", "[ de ] =" ));
1058cdf0e10cSrcweir // }
1059cdf0e10cSrcweir SetChildWithText();
1060cdf0e10cSrcweir pResData->bTitle = sal_True;
1061cdf0e10cSrcweir if ( bMergeMode )
1062cdf0e10cSrcweir PrepareTextToMerge( sOrig, STRING_TYP_TITLE, nLangIndex, pResData );
1063cdf0e10cSrcweir //if ( bUnmerge )
1064cdf0e10cSrcweir // pResData->sTitle[ nLangIndex ] = sText;
1065cdf0e10cSrcweir else {
1066cdf0e10cSrcweir if ( pResData->sTitle[ nLangIndex ].Len()) {
1067cdf0e10cSrcweir ByteString sError( "Language " );
1068cdf0e10cSrcweir sError += nLangIndex;
1069cdf0e10cSrcweir sError += " defined twice";
1070cdf0e10cSrcweir }
1071cdf0e10cSrcweir pResData->sTitle[ nLangIndex ] = sText;
1072cdf0e10cSrcweir }
1073cdf0e10cSrcweir }
1074cdf0e10cSrcweir else if ( sKey == "ACCESSPATH" ) {
1075cdf0e10cSrcweir pResData->SetId( sText, ID_LEVEL_ACCESSPATH );
1076cdf0e10cSrcweir }
1077cdf0e10cSrcweir else if ( sKey == "FIELDNAME" ) {
1078cdf0e10cSrcweir pResData->SetId( sText, ID_LEVEL_FIELDNAME );
1079cdf0e10cSrcweir }
1080cdf0e10cSrcweir }
1081cdf0e10cSrcweir }
1082cdf0e10cSrcweir break;
1083cdf0e10cSrcweir case NEWTEXTINRES: {
1084cdf0e10cSrcweir bDontWriteOutput = sal_True;
1085cdf0e10cSrcweir // this means something like // ### Achtung : Neuer Text ...
1086cdf0e10cSrcweir /*ByteString sLang( "GERMAN" );
1087cdf0e10cSrcweir ByteString sText = sToken.GetToken( 2, ':' ).GetToken( 0, '*' );
1088cdf0e10cSrcweir CleanValue( sText );
1089cdf0e10cSrcweir if ( sText.Len())
1090cdf0e10cSrcweir pResData->sText[ sLang ] = sText;*/
1091cdf0e10cSrcweir }
1092cdf0e10cSrcweir break;
1093cdf0e10cSrcweir case APPFONTMAPPING: {
1094cdf0e10cSrcweir bDontWriteOutput = sal_False;
1095cdf0e10cSrcweir // this is a AppfontMapping, so look if its a definition
1096cdf0e10cSrcweir // of field size
1097cdf0e10cSrcweir ByteString sKey = sToken.GetToken( 0, '=' );
1098cdf0e10cSrcweir sKey.EraseAllChars( ' ' );
1099cdf0e10cSrcweir sKey.EraseAllChars( '\t' );
1100cdf0e10cSrcweir ByteString sMapping = sToken.GetToken( 1, '=' );
1101cdf0e10cSrcweir sMapping = sMapping.GetToken( 1, '(' );
1102cdf0e10cSrcweir sMapping = sMapping.GetToken( 0, ')' );
1103cdf0e10cSrcweir sMapping.EraseAllChars( ' ' );
1104cdf0e10cSrcweir sMapping.EraseAllChars( '\t' );
1105cdf0e10cSrcweir if ( sKey.ToUpperAscii() == "SIZE" ) {
1106cdf0e10cSrcweir pResData->nWidth = ( sal_uInt16 ) sMapping.GetToken( 0, ',' ).ToInt64();
1107cdf0e10cSrcweir }
1108cdf0e10cSrcweir else if ( sKey == "POSSIZE" ) {
1109cdf0e10cSrcweir pResData->nWidth = ( sal_uInt16 ) sMapping.GetToken( 2, ',' ).ToInt64();
1110cdf0e10cSrcweir }
1111cdf0e10cSrcweir }
1112cdf0e10cSrcweir break;
1113cdf0e10cSrcweir case RSCDEFINELEND:
1114cdf0e10cSrcweir bDontWriteOutput = sal_False;
1115cdf0e10cSrcweir break;
1116cdf0e10cSrcweir case CONDITION: {
1117cdf0e10cSrcweir bDontWriteOutput = sal_False;
1118cdf0e10cSrcweir while( sToken.SearchAndReplace( "\r", " " ) != STRING_NOTFOUND ) {};
1119cdf0e10cSrcweir while( sToken.SearchAndReplace( "\t", " " ) != STRING_NOTFOUND ) {};
1120cdf0e10cSrcweir while( sToken.SearchAndReplace( " ", " " ) != STRING_NOTFOUND ) {};
1121cdf0e10cSrcweir ByteString sCondition = sToken.GetToken( 0, ' ' );
1122cdf0e10cSrcweir if ( sCondition == "#ifndef" ) {
1123cdf0e10cSrcweir sActPForm = "!defined ";
1124cdf0e10cSrcweir sActPForm += sToken.GetToken( 1, ' ' );
1125cdf0e10cSrcweir }
1126cdf0e10cSrcweir else if ( sCondition == "#ifdef" ) {
1127cdf0e10cSrcweir sActPForm = "defined ";
1128cdf0e10cSrcweir sActPForm += sToken.GetToken( 1, ' ' );
1129cdf0e10cSrcweir }
1130cdf0e10cSrcweir else if ( sCondition == "#if" ) {
1131cdf0e10cSrcweir sActPForm = sToken.Copy( 4 );
1132cdf0e10cSrcweir while ( sActPForm.SearchAndReplace( "||", "\\or" ) != STRING_NOTFOUND ) {};
1133cdf0e10cSrcweir }
1134cdf0e10cSrcweir else if ( sCondition == "#elif" ) {
1135cdf0e10cSrcweir sActPForm = sToken.Copy( 6 );
1136cdf0e10cSrcweir while ( sActPForm.SearchAndReplace( "||", "\\or" ) != STRING_NOTFOUND ) {};
1137cdf0e10cSrcweir }
1138cdf0e10cSrcweir else if ( sCondition == "#else" ) {
1139cdf0e10cSrcweir sActPForm = sCondition;
1140cdf0e10cSrcweir }
1141cdf0e10cSrcweir else if ( sCondition == "#endif" ) {
1142cdf0e10cSrcweir sActPForm = "";
1143cdf0e10cSrcweir }
1144cdf0e10cSrcweir else break;
1145cdf0e10cSrcweir if ( nLevel ) {
1146cdf0e10cSrcweir WriteData( pResData, sal_True );
1147cdf0e10cSrcweir pResData->sPForm = sActPForm;
1148cdf0e10cSrcweir }
1149cdf0e10cSrcweir }
1150cdf0e10cSrcweir break;
1151cdf0e10cSrcweir case EMPTYLINE : {
1152cdf0e10cSrcweir bDontWriteOutput = sal_False;
1153cdf0e10cSrcweir if ( bDefine ) {
1154cdf0e10cSrcweir bNextMustBeDefineEOL = sal_False;
1155cdf0e10cSrcweir bDefine = sal_False;
1156cdf0e10cSrcweir while ( nLevel )
1157cdf0e10cSrcweir Parse( LEVELDOWN, "" );
1158cdf0e10cSrcweir //WorkOnTokenSet( LEVELDOWN, pTkn );
1159cdf0e10cSrcweir }
1160cdf0e10cSrcweir }
1161cdf0e10cSrcweir break;
1162cdf0e10cSrcweir case PRAGMA : {
1163cdf0e10cSrcweir bDontWriteOutput = sal_False;
1164cdf0e10cSrcweir while( sToken.SearchAndReplace( "\t", " " ) != STRING_NOTFOUND ) {};
1165cdf0e10cSrcweir while( sToken.SearchAndReplace( " ", " " ) != STRING_NOTFOUND ) {};
1166cdf0e10cSrcweir sToken.EraseLeadingChars( ' ' );
1167cdf0e10cSrcweir sToken.EraseTrailingChars( ' ' );
1168cdf0e10cSrcweir
1169cdf0e10cSrcweir ByteString sCharset = sToken.GetToken( 1, ' ' );
1170cdf0e10cSrcweir ByteString sSet = sToken.GetToken( 2, ' ' );
1171cdf0e10cSrcweir if (( sCharset.ToUpperAscii() == "CHARSET_IBMPC" ) ||
1172cdf0e10cSrcweir ( sCharset == "RTL_TEXTENCODING_IBM_850" ) ||
1173cdf0e10cSrcweir (( sCharset == "CHARSET" ) && ( sSet.ToUpperAscii() == "IBMPC" )))
1174cdf0e10cSrcweir {
1175cdf0e10cSrcweir aCharSet = RTL_TEXTENCODING_IBM_850;
1176cdf0e10cSrcweir }
1177cdf0e10cSrcweir else if (( sCharset == "CHARSET_ANSI" ) ||
1178cdf0e10cSrcweir ( sCharset == "RTL_TEXTENCODING_MS_1252" ) ||
1179cdf0e10cSrcweir (( sCharset == "CHARSET" ) && ( sSet.ToUpperAscii() == "ANSI" )))
1180cdf0e10cSrcweir {
1181cdf0e10cSrcweir aCharSet = RTL_TEXTENCODING_MS_1252;
1182cdf0e10cSrcweir }
1183cdf0e10cSrcweir }
1184cdf0e10cSrcweir break;
1185cdf0e10cSrcweir case TEXTREFID : {
1186cdf0e10cSrcweir bDontWriteOutput = sal_True;
1187cdf0e10cSrcweir /*ByteString sK = sToken.GetToken( 0, '=' );
1188cdf0e10cSrcweir ByteString sKey = sK.EraseAllChars( '\t' ).EraseAllChars( ' ' );
1189cdf0e10cSrcweir ByteString sT = sToken.GetToken( 1, '=' ).GetToken( 0, ';' );
1190cdf0e10cSrcweir sal_uInt16 nRefId = ( sal_uInt16 ) sT.EraseAllChars( '\t' ).EraseAllChars( ' ' ).ToInt32();
1191cdf0e10cSrcweir if (( sKey.ToUpperAscii() == "TEXT" ) ||
1192cdf0e10cSrcweir ( sKey == "MESSAGE" ) ||
1193cdf0e10cSrcweir ( sKey == "CUSTOMUNITTEXT" ) ||
1194cdf0e10cSrcweir ( sKey == "SLOTNAME" ) ||
1195cdf0e10cSrcweir ( sKey == "UINAME" ))
1196cdf0e10cSrcweir pResData->nTextRefId = nRefId;
1197cdf0e10cSrcweir else if ( sKey == "HELPTEXT" )
1198cdf0e10cSrcweir pResData->nHelpTextRefId = nRefId;
1199cdf0e10cSrcweir else if ( sKey == "QUICKHELPTEXT" )
1200cdf0e10cSrcweir pResData->nQuickHelpTextRefId = nRefId;
1201cdf0e10cSrcweir else if ( sKey == "TITLE" )
1202cdf0e10cSrcweir pResData->nTitleRefId = nRefId;*/
1203cdf0e10cSrcweir }
1204cdf0e10cSrcweir }
1205cdf0e10cSrcweir if ( bWriteToMerged ) {
1206cdf0e10cSrcweir // the current token must be written to dest. without merging
1207cdf0e10cSrcweir
1208cdf0e10cSrcweir if( bDefine && sOrig.Len() > 2 ){
1209cdf0e10cSrcweir for( sal_uInt16 n = 0 ; n < sOrig.Len() ; n++ ){
1210cdf0e10cSrcweir if( sOrig.GetChar( n ) == '\n' && sOrig.GetChar( n-1 ) != '\\'){
1211cdf0e10cSrcweir sOrig.Insert('\\' , n++ );
1212cdf0e10cSrcweir }
1213cdf0e10cSrcweir }
1214cdf0e10cSrcweir }
1215cdf0e10cSrcweir WriteToMerged( sOrig , false);
1216cdf0e10cSrcweir }
1217cdf0e10cSrcweir
1218cdf0e10cSrcweir if ( bExecuteDown ) {
1219cdf0e10cSrcweir Parse( LEVELDOWN, "" );
1220cdf0e10cSrcweir //WorkOnTokenSet( LEVELDOWN, pTkn );
1221cdf0e10cSrcweir }
1222cdf0e10cSrcweir
1223cdf0e10cSrcweir return 1;
1224cdf0e10cSrcweir }
1225cdf0e10cSrcweir
1226cdf0e10cSrcweir /*****************************************************************************/
CutComment(ByteString & rText)1227cdf0e10cSrcweir void Export::CutComment( ByteString &rText )
1228cdf0e10cSrcweir /*****************************************************************************/
1229cdf0e10cSrcweir {
1230cdf0e10cSrcweir if ( rText.Search( "//" ) != STRING_NOTFOUND ) {
1231cdf0e10cSrcweir ByteString sWork( rText );
1232cdf0e10cSrcweir sWork.SearchAndReplaceAll( "\\\"", "XX" );
1233cdf0e10cSrcweir sal_uInt16 i = 0;
1234cdf0e10cSrcweir sal_Bool bInner = sal_False;
1235cdf0e10cSrcweir
1236cdf0e10cSrcweir while ( i < sWork.Len() - 1 ) {
1237cdf0e10cSrcweir if ( sWork.GetChar( i ) == '\"' )
1238cdf0e10cSrcweir bInner = !bInner;
1239cdf0e10cSrcweir else if
1240cdf0e10cSrcweir (( sWork.GetChar( i ) == '/' ) &&
1241cdf0e10cSrcweir ( !bInner ) &&
1242cdf0e10cSrcweir ( sWork.GetChar( i + 1 ) == '/' ))
1243cdf0e10cSrcweir {
1244cdf0e10cSrcweir rText.Erase( i );
1245cdf0e10cSrcweir return;
1246cdf0e10cSrcweir }
1247cdf0e10cSrcweir i++;
1248cdf0e10cSrcweir }
1249cdf0e10cSrcweir }
1250cdf0e10cSrcweir }
1251cdf0e10cSrcweir
UnmergeUTF8(ByteString & sOrig)1252cdf0e10cSrcweir void Export::UnmergeUTF8( ByteString& sOrig ){
1253cdf0e10cSrcweir sal_uInt16 nPos1 = sOrig.Search('\"');
1254cdf0e10cSrcweir sal_uInt16 nPos2 = sOrig.SearchBackward('\"');
1255cdf0e10cSrcweir if( nPos1 > 0 && nPos2 > 0 && nPos1 < nPos2){
1256cdf0e10cSrcweir ByteString sPart = sOrig.Copy(nPos1+1 , nPos2-1);
1257cdf0e10cSrcweir ByteString sPartUTF8 = sPart;
1258cdf0e10cSrcweir sPartUTF8.Convert( RTL_TEXTENCODING_MS_1252 , RTL_TEXTENCODING_UTF8 );
1259cdf0e10cSrcweir sOrig.SearchAndReplace( sPart , sPartUTF8 );
1260cdf0e10cSrcweir }
1261cdf0e10cSrcweir }
1262cdf0e10cSrcweir
1263cdf0e10cSrcweir /*****************************************************************************/
ListExists(ResData * pResData,sal_uInt16 nLst)1264cdf0e10cSrcweir sal_Bool Export::ListExists( ResData *pResData, sal_uInt16 nLst )
1265cdf0e10cSrcweir /*****************************************************************************/
1266cdf0e10cSrcweir {
1267cdf0e10cSrcweir switch ( nLst ) {
1268cdf0e10cSrcweir case LIST_STRING: return pResData->pStringList != NULL;
1269cdf0e10cSrcweir case LIST_FILTER: return pResData->pFilterList != NULL;
1270cdf0e10cSrcweir case LIST_ITEM: return pResData->pItemList != NULL;
1271cdf0e10cSrcweir case LIST_PAIRED: return pResData->pPairedList != NULL;
1272cdf0e10cSrcweir case LIST_UIENTRIES: return pResData->pUIEntries != NULL;
1273cdf0e10cSrcweir }
1274cdf0e10cSrcweir return sal_False;
1275cdf0e10cSrcweir }
1276cdf0e10cSrcweir
1277cdf0e10cSrcweir /*****************************************************************************/
WriteData(ResData * pResData,sal_Bool bCreateNew)1278cdf0e10cSrcweir sal_Bool Export::WriteData( ResData *pResData, sal_Bool bCreateNew )
1279cdf0e10cSrcweir /*****************************************************************************/
1280cdf0e10cSrcweir {
1281cdf0e10cSrcweir if ( bMergeMode ) {
1282cdf0e10cSrcweir MergeRest( pResData );
1283cdf0e10cSrcweir return sal_True;
1284cdf0e10cSrcweir }
1285cdf0e10cSrcweir
1286cdf0e10cSrcweir if ( bUnmerge )
1287cdf0e10cSrcweir return sal_True;
1288cdf0e10cSrcweir
1289cdf0e10cSrcweir /* ByteStringHashMap::iterator pos3 = pResData->sText.begin();
1290cdf0e10cSrcweir ByteStringHashMap::iterator end3 = pResData->sText.end();
1291cdf0e10cSrcweir for(;pos3!=end3;++pos3){
1292cdf0e10cSrcweir
1293cdf0e10cSrcweir printf("[%s]=%s\n", pos3->first.GetBuffer(), pos3->second.GetBuffer() );
1294cdf0e10cSrcweir }*/
1295cdf0e10cSrcweir // mandatory to export: en-US
1296cdf0e10cSrcweir
1297cdf0e10cSrcweir if (( //pResData->sText[ ByteString("de") ].Len() &&
1298cdf0e10cSrcweir ( pResData->sText[ SOURCE_LANGUAGE ].Len()))
1299cdf0e10cSrcweir ||
1300cdf0e10cSrcweir ( //pResData->sHelpText[ ByteString("de") ].Len() &&
1301cdf0e10cSrcweir ( pResData->sHelpText[ SOURCE_LANGUAGE ].Len()))
1302cdf0e10cSrcweir ||
1303cdf0e10cSrcweir ( //pResData->sQuickHelpText[ ByteString("de") ].Len() &&
1304cdf0e10cSrcweir ( pResData->sQuickHelpText[ SOURCE_LANGUAGE ].Len()))
1305cdf0e10cSrcweir ||
1306cdf0e10cSrcweir ( //pResData->sTitle[ ByteString("de") ].Len() &&
1307cdf0e10cSrcweir ( pResData->sTitle[ SOURCE_LANGUAGE ].Len())))
1308cdf0e10cSrcweir
1309cdf0e10cSrcweir {
1310cdf0e10cSrcweir FillInFallbacks( pResData );
1311cdf0e10cSrcweir
1312cdf0e10cSrcweir ByteString sGID = pResData->sGId;
1313cdf0e10cSrcweir ByteString sLID;
1314cdf0e10cSrcweir if ( !sGID.Len())
1315cdf0e10cSrcweir sGID = pResData->sId;
1316cdf0e10cSrcweir else
1317cdf0e10cSrcweir sLID = pResData->sId;
1318cdf0e10cSrcweir
1319cdf0e10cSrcweir ByteString sXText;
1320cdf0e10cSrcweir ByteString sXHText;
1321cdf0e10cSrcweir ByteString sXQHText;
1322cdf0e10cSrcweir ByteString sXTitle;
1323cdf0e10cSrcweir
1324cdf0e10cSrcweir ByteString sTimeStamp( Export::GetTimeStamp());
1325cdf0e10cSrcweir ByteString sCur;
1326cdf0e10cSrcweir
1327cdf0e10cSrcweir for( unsigned int n = 0; n < aLanguages.size(); n++ ){
1328cdf0e10cSrcweir sCur = aLanguages[ n ];
1329cdf0e10cSrcweir if ( !sCur.EqualsIgnoreCaseAscii("x-comment") ){
1330cdf0e10cSrcweir if ( pResData->sText[ sCur ].Len())
1331cdf0e10cSrcweir sXText = pResData->sText[ sCur ];
1332cdf0e10cSrcweir else {
1333cdf0e10cSrcweir sXText = pResData->sText[ SOURCE_LANGUAGE ];
1334cdf0e10cSrcweir /*if ( !sXText.Len())
1335cdf0e10cSrcweir sXText = pResData->sText[ ByteString("en") ];
1336cdf0e10cSrcweir if ( !sXText.Len())
1337cdf0e10cSrcweir sXText = pResData->sText[ ByteString("de") ];*/
1338cdf0e10cSrcweir }
1339cdf0e10cSrcweir
1340cdf0e10cSrcweir if ( pResData->sHelpText[ sCur ].Len())
1341cdf0e10cSrcweir sXHText = pResData->sHelpText[ sCur ];
1342cdf0e10cSrcweir else {
1343cdf0e10cSrcweir sXHText = pResData->sHelpText[ SOURCE_LANGUAGE ];
1344cdf0e10cSrcweir /*if ( !sXHText.Len())
1345cdf0e10cSrcweir sXHText = pResData->sHelpText[ ByteString("en") ];
1346cdf0e10cSrcweir if ( !sXText.Len())
1347cdf0e10cSrcweir sXHText = pResData->sHelpText[ ByteString("de") ];*/
1348cdf0e10cSrcweir }
1349cdf0e10cSrcweir
1350cdf0e10cSrcweir if ( pResData->sQuickHelpText[ sCur ].Len())
1351cdf0e10cSrcweir sXQHText = pResData->sQuickHelpText[ sCur ];
1352cdf0e10cSrcweir else {
1353cdf0e10cSrcweir sXQHText = pResData->sQuickHelpText[ SOURCE_LANGUAGE ];
1354cdf0e10cSrcweir /*if ( !sXQHText.Len())
1355cdf0e10cSrcweir sXQHText = pResData->sQuickHelpText[ ByteString("en") ];
1356cdf0e10cSrcweir if ( !sXQHText.Len())
1357cdf0e10cSrcweir sXQHText = pResData->sQuickHelpText[ ByteString("de") ];*/
1358cdf0e10cSrcweir }
1359cdf0e10cSrcweir
1360cdf0e10cSrcweir if ( pResData->sTitle[ sCur ].Len())
1361cdf0e10cSrcweir sXTitle = pResData->sTitle[ sCur ];
1362cdf0e10cSrcweir else {
1363cdf0e10cSrcweir sXTitle = pResData->sTitle[ SOURCE_LANGUAGE ];
1364cdf0e10cSrcweir /*if ( !sXTitle.Len())
1365cdf0e10cSrcweir sXTitle = pResData->sTitle[ ByteString("en") ];
1366cdf0e10cSrcweir if ( !sXTitle.Len())
1367cdf0e10cSrcweir sXTitle = pResData->sTitle[ ByteString("de") ];*/
1368cdf0e10cSrcweir }
1369cdf0e10cSrcweir
1370cdf0e10cSrcweir if ( !sXText.Len())
1371cdf0e10cSrcweir sXText = "-";
1372cdf0e10cSrcweir
1373cdf0e10cSrcweir if ( !sXHText.Len()) {
1374cdf0e10cSrcweir /*if ( pResData->sHelpText[ ByteString("de") ].Len())
1375cdf0e10cSrcweir sXHText = pResData->sHelpText[ ByteString("de") ];*/
1376cdf0e10cSrcweir if ( pResData->sHelpText[ SOURCE_LANGUAGE ].Len())
1377cdf0e10cSrcweir sXHText = pResData->sHelpText[ SOURCE_LANGUAGE ];
1378cdf0e10cSrcweir /*else if ( pResData->sHelpText[ ByteString("en") ].Len())
1379cdf0e10cSrcweir sXHText = pResData->sHelpText[ ByteString("en") ];*/
1380cdf0e10cSrcweir }
1381cdf0e10cSrcweir }
1382cdf0e10cSrcweir else
1383cdf0e10cSrcweir sXText = pResData->sText[ sCur ];
1384cdf0e10cSrcweir
1385cdf0e10cSrcweir if ( bEnableExport ) {
1386cdf0e10cSrcweir ByteString sOutput( sProject ); sOutput += "\t";
1387cdf0e10cSrcweir if ( sRoot.Len())
1388cdf0e10cSrcweir sOutput += sActFileName;
1389cdf0e10cSrcweir sOutput += "\t0\t";
1390cdf0e10cSrcweir sOutput += pResData->sResTyp; sOutput += "\t";
1391cdf0e10cSrcweir sOutput += sGID; sOutput += "\t";
1392cdf0e10cSrcweir sOutput += sLID; sOutput += "\t";
1393cdf0e10cSrcweir sOutput += pResData->sHelpId; sOutput += "\t";
1394cdf0e10cSrcweir sOutput += pResData->sPForm; sOutput += "\t";
1395cdf0e10cSrcweir sOutput += ByteString::CreateFromInt64( pResData->nWidth ); sOutput += "\t";
1396cdf0e10cSrcweir sOutput += sCur; sOutput += "\t";
1397cdf0e10cSrcweir
1398cdf0e10cSrcweir
1399cdf0e10cSrcweir sOutput += sXText; sOutput += "\t";
1400cdf0e10cSrcweir sOutput += sXHText; sOutput += "\t";
1401cdf0e10cSrcweir sOutput += sXQHText; sOutput+= "\t";
1402cdf0e10cSrcweir sOutput += sXTitle; sOutput += "\t";
1403cdf0e10cSrcweir sOutput += sTimeStamp;
1404cdf0e10cSrcweir
1405cdf0e10cSrcweir // if( !sCur.EqualsIgnoreCaseAscii("de") ||( sCur.EqualsIgnoreCaseAscii("de") && !Export::isMergingGermanAllowed( sProject ) ) )
1406cdf0e10cSrcweir aOutput.WriteLine( sOutput );
1407cdf0e10cSrcweir }
1408cdf0e10cSrcweir
1409cdf0e10cSrcweir if ( bCreateNew ) {
1410cdf0e10cSrcweir pResData->sText[ sCur ] = "";
1411cdf0e10cSrcweir pResData->sHelpText[ sCur ] = "";
1412cdf0e10cSrcweir pResData->sQuickHelpText[ sCur ]= "";
1413cdf0e10cSrcweir pResData->sTitle[ sCur ] = "";
1414cdf0e10cSrcweir }
1415cdf0e10cSrcweir }
1416cdf0e10cSrcweir }
1417cdf0e10cSrcweir FillInFallbacks( pResData );
1418cdf0e10cSrcweir if ( pResData->pStringList ) {
1419cdf0e10cSrcweir ByteString sList( "stringlist" );
1420cdf0e10cSrcweir WriteExportList( pResData, pResData->pStringList, sList, bCreateNew );
1421cdf0e10cSrcweir if ( bCreateNew )
1422cdf0e10cSrcweir pResData->pStringList = 0;
1423cdf0e10cSrcweir }
1424cdf0e10cSrcweir if ( pResData->pFilterList ) {
1425cdf0e10cSrcweir ByteString sList( "filterlist" );
1426cdf0e10cSrcweir WriteExportList( pResData, pResData->pFilterList, sList, bCreateNew );
1427cdf0e10cSrcweir if ( bCreateNew )
1428cdf0e10cSrcweir pResData->pFilterList = 0;
1429cdf0e10cSrcweir }
1430cdf0e10cSrcweir if ( pResData->pItemList ) {
1431cdf0e10cSrcweir ByteString sList( "itemlist" );
1432cdf0e10cSrcweir WriteExportList( pResData, pResData->pItemList, sList, bCreateNew );
1433cdf0e10cSrcweir if ( bCreateNew )
1434cdf0e10cSrcweir pResData->pItemList = 0;
1435cdf0e10cSrcweir }
1436cdf0e10cSrcweir if ( pResData->pPairedList ) {
1437cdf0e10cSrcweir ByteString sList( "pairedlist" );
1438cdf0e10cSrcweir WriteExportList( pResData, pResData->pPairedList, sList, bCreateNew );
1439cdf0e10cSrcweir if ( bCreateNew )
1440cdf0e10cSrcweir pResData->pItemList = 0;
1441cdf0e10cSrcweir }
1442cdf0e10cSrcweir if ( pResData->pUIEntries ) {
1443cdf0e10cSrcweir ByteString sList( "uientries" );
1444cdf0e10cSrcweir WriteExportList( pResData, pResData->pUIEntries, sList, bCreateNew );
1445cdf0e10cSrcweir if ( bCreateNew )
1446cdf0e10cSrcweir pResData->pUIEntries = 0;
1447cdf0e10cSrcweir }
1448cdf0e10cSrcweir return sal_True;
1449cdf0e10cSrcweir }
GetPairedListID(const ByteString & sText)1450cdf0e10cSrcweir ByteString Export::GetPairedListID( const ByteString& sText ){
1451cdf0e10cSrcweir // < "STRING" ; IDENTIFIER ; > ;
1452cdf0e10cSrcweir ByteString sIdent = sText.GetToken( 1, ';' );
1453cdf0e10cSrcweir sIdent.ToUpperAscii();
1454cdf0e10cSrcweir while( sIdent.SearchAndReplace( "\t", " " ) != STRING_NOTFOUND ) {};
1455cdf0e10cSrcweir sIdent.EraseTrailingChars( ' ' );
1456cdf0e10cSrcweir sIdent.EraseLeadingChars( ' ' );
1457cdf0e10cSrcweir return sIdent;
1458cdf0e10cSrcweir }
GetPairedListString(const ByteString & sText)1459cdf0e10cSrcweir ByteString Export::GetPairedListString( const ByteString& sText ){
1460cdf0e10cSrcweir // < "STRING" ; IDENTIFIER ; > ;
1461cdf0e10cSrcweir ByteString sString = sText.GetToken( 0, ';' );
1462cdf0e10cSrcweir while( sString.SearchAndReplace( "\t", " " ) != STRING_NOTFOUND ) {};
1463cdf0e10cSrcweir sString.EraseTrailingChars( ' ' );
1464cdf0e10cSrcweir ByteString s1 = sString.Copy( sString.Search( '\"' )+1 );
1465cdf0e10cSrcweir sString = s1.Copy( 0 , s1.SearchBackward( '\"' ) );
1466cdf0e10cSrcweir sString.EraseTrailingChars( ' ' );
1467cdf0e10cSrcweir sString.EraseLeadingChars( ' ' );
1468cdf0e10cSrcweir return sString;
1469cdf0e10cSrcweir }
StripList(const ByteString & sText)1470cdf0e10cSrcweir ByteString Export::StripList( const ByteString& sText ){
1471cdf0e10cSrcweir ByteString s1 = sText.Copy( sText.Search( '\"' ) + 1 );
1472cdf0e10cSrcweir return s1.Copy( 0 , s1.SearchBackward( '\"' ) );
1473cdf0e10cSrcweir }
1474cdf0e10cSrcweir
1475cdf0e10cSrcweir /*****************************************************************************/
WriteExportList(ResData * pResData,ExportList * pExportList,const ByteString & rTyp,sal_Bool bCreateNew)1476cdf0e10cSrcweir sal_Bool Export::WriteExportList( ResData *pResData, ExportList *pExportList,
1477cdf0e10cSrcweir const ByteString &rTyp, sal_Bool bCreateNew )
1478cdf0e10cSrcweir /*****************************************************************************/
1479cdf0e10cSrcweir {
1480cdf0e10cSrcweir ByteString sGID = pResData->sGId;
1481cdf0e10cSrcweir if ( !sGID.Len())
1482cdf0e10cSrcweir sGID = pResData->sId;
1483cdf0e10cSrcweir else {
1484cdf0e10cSrcweir sGID += ".";
1485cdf0e10cSrcweir sGID += pResData->sId;
1486cdf0e10cSrcweir sGID.EraseTrailingChars( '.' );
1487cdf0e10cSrcweir }
1488cdf0e10cSrcweir
1489cdf0e10cSrcweir ByteString sTimeStamp( Export::GetTimeStamp());
1490cdf0e10cSrcweir ByteString sCur;
1491cdf0e10cSrcweir for ( sal_uLong i = 0; pExportList != NULL && i < pExportList->Count(); i++ ) {
1492cdf0e10cSrcweir ExportListEntry *pEntry = pExportList->GetObject( i );
1493cdf0e10cSrcweir // mandatory for export: german and eng. and/or enus
1494cdf0e10cSrcweir //ByteString a("Export::WriteExportList::pEntry");
1495cdf0e10cSrcweir //Export::DumpMap( a, *pEntry );
1496cdf0e10cSrcweir
1497cdf0e10cSrcweir ByteString sLID( ByteString::CreateFromInt64( i + 1 ));
1498cdf0e10cSrcweir for( unsigned int n = 0; n < aLanguages.size(); n++ ){
1499cdf0e10cSrcweir sCur = aLanguages[ n ];
1500cdf0e10cSrcweir if ( //1 )
1501cdf0e10cSrcweir //(*pEntry)[ ByteString("de") ].Len() &&
1502cdf0e10cSrcweir (*pEntry)[ SOURCE_LANGUAGE ].Len() )
1503cdf0e10cSrcweir //||
1504cdf0e10cSrcweir // (*pEntry)[ ByteString("en") ].Len()))
1505cdf0e10cSrcweir {
1506cdf0e10cSrcweir if ( bEnableExport )
1507cdf0e10cSrcweir {
1508cdf0e10cSrcweir ByteString sText((*pEntry)[ SOURCE_LANGUAGE ] );
1509cdf0e10cSrcweir
1510cdf0e10cSrcweir // Strip PairList Line String
1511cdf0e10cSrcweir if( rTyp.EqualsIgnoreCaseAscii("pairedlist") ){
1512cdf0e10cSrcweir sLID = GetPairedListID( sText );
1513cdf0e10cSrcweir if ((*pEntry)[ sCur ].Len())
1514cdf0e10cSrcweir sText = (*pEntry)[ sCur ];
1515cdf0e10cSrcweir sText = GetPairedListString( sText );
1516cdf0e10cSrcweir }
1517cdf0e10cSrcweir else{
1518cdf0e10cSrcweir //if ((*pEntry)[ sCur ].Len()){
1519cdf0e10cSrcweir // if( sCur.EqualsIgnoreCaseAscii("de") ){
1520cdf0e10cSrcweir // sText = StripList( (*pEntry)[ sCur ] );
1521cdf0e10cSrcweir // }
1522cdf0e10cSrcweir // else
1523cdf0e10cSrcweir sText = StripList( (*pEntry)[ sCur ] );
1524cdf0e10cSrcweir if( sText == "\\\"" )
1525cdf0e10cSrcweir sText = "\"";
1526cdf0e10cSrcweir //}
1527cdf0e10cSrcweir }
1528cdf0e10cSrcweir
1529cdf0e10cSrcweir ByteString sOutput( sProject ); sOutput += "\t";
1530cdf0e10cSrcweir if ( sRoot.Len())
1531cdf0e10cSrcweir sOutput += sActFileName;
1532cdf0e10cSrcweir sOutput += "\t0\t";
1533cdf0e10cSrcweir sOutput += rTyp; sOutput += "\t";
1534cdf0e10cSrcweir sOutput += sGID; sOutput += "\t";
1535cdf0e10cSrcweir sOutput += sLID; sOutput += "\t\t";
1536cdf0e10cSrcweir sOutput += pResData->sPForm; sOutput += "\t0\t";
1537cdf0e10cSrcweir sOutput += sCur; sOutput += "\t";
1538cdf0e10cSrcweir
1539cdf0e10cSrcweir sOutput += sText; sOutput += "\t\t\t\t";
1540cdf0e10cSrcweir sOutput += sTimeStamp;
1541cdf0e10cSrcweir
1542cdf0e10cSrcweir //if( !sCur.EqualsIgnoreCaseAscii("de") ||( sCur.EqualsIgnoreCaseAscii("de") && !Export::isMergingGermanAllowed( sProject ) ) )
1543cdf0e10cSrcweir aOutput.WriteLine( sOutput );
1544cdf0e10cSrcweir
1545cdf0e10cSrcweir }
1546cdf0e10cSrcweir }
1547cdf0e10cSrcweir }
1548cdf0e10cSrcweir if ( bCreateNew )
1549cdf0e10cSrcweir delete [] pEntry;
1550cdf0e10cSrcweir }
1551cdf0e10cSrcweir if ( bCreateNew )
1552cdf0e10cSrcweir delete pExportList;
1553cdf0e10cSrcweir
1554cdf0e10cSrcweir return sal_True;
1555cdf0e10cSrcweir }
1556cdf0e10cSrcweir
1557cdf0e10cSrcweir /*****************************************************************************/
FullId()1558cdf0e10cSrcweir ByteString Export::FullId()
1559cdf0e10cSrcweir /*****************************************************************************/
1560cdf0e10cSrcweir {
1561cdf0e10cSrcweir ByteString sFull;
1562cdf0e10cSrcweir if ( nLevel > 1 ) {
1563cdf0e10cSrcweir sFull = aResStack.GetObject( 0 )->sId;
1564cdf0e10cSrcweir for ( sal_uInt16 i = 1; i < nLevel - 1; i++ ) {
1565cdf0e10cSrcweir ByteString sToAdd = aResStack.GetObject( i )->sId;
1566cdf0e10cSrcweir if ( sToAdd.Len()) {
1567cdf0e10cSrcweir sFull += ".";
1568cdf0e10cSrcweir sFull += sToAdd;
1569cdf0e10cSrcweir }
1570cdf0e10cSrcweir }
1571cdf0e10cSrcweir }
1572cdf0e10cSrcweir if ( sFull.Len() > 255 ) {
1573cdf0e10cSrcweir ByteString sError( "GroupId > 255 chars" );
1574cdf0e10cSrcweir printf("GroupID = %s\n",sFull.GetBuffer());
1575cdf0e10cSrcweir yyerror( sError.GetBufferAccess());
1576cdf0e10cSrcweir sError.ReleaseBufferAccess();
1577cdf0e10cSrcweir }
1578cdf0e10cSrcweir
1579cdf0e10cSrcweir return sFull;
1580cdf0e10cSrcweir }
1581cdf0e10cSrcweir
1582cdf0e10cSrcweir /*****************************************************************************/
InsertListEntry(const ByteString & rText,const ByteString & rLine)1583cdf0e10cSrcweir void Export::InsertListEntry( const ByteString &rText, const ByteString &rLine )
1584cdf0e10cSrcweir /*****************************************************************************/
1585cdf0e10cSrcweir {
1586cdf0e10cSrcweir ResData *pResData = aResStack.GetObject( nLevel-1 );
1587cdf0e10cSrcweir
1588cdf0e10cSrcweir ExportList *pList = NULL;
1589cdf0e10cSrcweir if ( nList == LIST_STRING ) {
1590cdf0e10cSrcweir pList = pResData->pStringList;
1591cdf0e10cSrcweir if ( !pList ) {
1592cdf0e10cSrcweir pResData->pStringList = new ExportList();
1593cdf0e10cSrcweir pList = pResData->pStringList;
1594cdf0e10cSrcweir nListIndex = 0;
1595cdf0e10cSrcweir }
1596cdf0e10cSrcweir }
1597cdf0e10cSrcweir else if ( nList == LIST_FILTER ) {
1598cdf0e10cSrcweir pList = pResData->pFilterList;
1599cdf0e10cSrcweir if ( !pList ) {
1600cdf0e10cSrcweir pResData->pFilterList = new ExportList();
1601cdf0e10cSrcweir pList = pResData->pFilterList;
1602cdf0e10cSrcweir nListIndex = 0;
1603cdf0e10cSrcweir }
1604cdf0e10cSrcweir }
1605cdf0e10cSrcweir else if ( nList == LIST_ITEM ) {
1606cdf0e10cSrcweir pList = pResData->pItemList;
1607cdf0e10cSrcweir if ( !pList ) {
1608cdf0e10cSrcweir pResData->pItemList = new ExportList();
1609cdf0e10cSrcweir pList = pResData->pItemList;
1610cdf0e10cSrcweir nListIndex = 0;
1611cdf0e10cSrcweir }
1612cdf0e10cSrcweir }
1613cdf0e10cSrcweir else if ( nList == LIST_PAIRED ) {
1614cdf0e10cSrcweir pList = pResData->pPairedList;
1615cdf0e10cSrcweir if ( !pList ) {
1616cdf0e10cSrcweir pResData->pPairedList = new ExportList();
1617cdf0e10cSrcweir pList = pResData->pPairedList;
1618cdf0e10cSrcweir nListIndex = 0;
1619cdf0e10cSrcweir }
1620cdf0e10cSrcweir }
1621cdf0e10cSrcweir else if ( nList == LIST_UIENTRIES ) {
1622cdf0e10cSrcweir pList = pResData->pUIEntries;
1623cdf0e10cSrcweir if ( !pList ) {
1624cdf0e10cSrcweir pResData->pUIEntries = new ExportList();
1625cdf0e10cSrcweir pList = pResData->pUIEntries;
1626cdf0e10cSrcweir nListIndex = 0;
1627cdf0e10cSrcweir }
1628cdf0e10cSrcweir }
1629cdf0e10cSrcweir else
1630cdf0e10cSrcweir return;
1631cdf0e10cSrcweir
1632cdf0e10cSrcweir if ( nListIndex + 1 > pList->Count()) {
1633cdf0e10cSrcweir ExportListEntry *pNew = new ExportListEntry();
1634cdf0e10cSrcweir (*pNew)[ LIST_REFID ] = ByteString::CreateFromInt32( REFID_NONE );
1635cdf0e10cSrcweir pList->Insert( pNew, LIST_APPEND );
1636cdf0e10cSrcweir }
1637cdf0e10cSrcweir ExportListEntry *pCurEntry = pList->GetObject( nListIndex );
1638cdf0e10cSrcweir
1639cdf0e10cSrcweir // For paired list use the line to set proper lid
1640cdf0e10cSrcweir if( nList == LIST_PAIRED ){
1641cdf0e10cSrcweir (*pCurEntry)[ nListLang ] = rLine;
1642cdf0e10cSrcweir }else
1643cdf0e10cSrcweir (*pCurEntry)[ nListLang ] = rText;
1644cdf0e10cSrcweir
1645cdf0e10cSrcweir // Remember en-US fallback string, so each list has the same amount of elements
1646cdf0e10cSrcweir //if ( nListLang.EqualsIgnoreCaseAscii("en-US") ) {
1647cdf0e10cSrcweir if ( Export::isSourceLanguage( nListLang ) ) {
1648cdf0e10cSrcweir if( nList == LIST_PAIRED ){
1649cdf0e10cSrcweir const ByteString sPlist("pairedlist");
1650cdf0e10cSrcweir ByteString sKey = MergeDataFile::CreateKey( sPlist , pResData->sId , GetPairedListID( rLine ) , sFilename );
1651cdf0e10cSrcweir pResData->addFallbackData( sKey , rText );
1652cdf0e10cSrcweir }
1653cdf0e10cSrcweir // new fallback
1654cdf0e10cSrcweir else{
1655cdf0e10cSrcweir const ByteString sPlist("list");
1656cdf0e10cSrcweir ByteString a( pResData->sGId );
1657cdf0e10cSrcweir a.Append( "." );
1658cdf0e10cSrcweir a.Append( pResData->sId );
1659cdf0e10cSrcweir sal_Int64 x = nListIndex+1;
1660cdf0e10cSrcweir ByteString b( ByteString::CreateFromInt64( x ) );
1661cdf0e10cSrcweir ByteString sKey = MergeDataFile::CreateKey( sPlist , a , b , sFilename );
1662cdf0e10cSrcweir pResData->addFallbackData( sKey , rText );
1663cdf0e10cSrcweir }
1664cdf0e10cSrcweir // new fallback
1665cdf0e10cSrcweir }
1666cdf0e10cSrcweir
1667cdf0e10cSrcweir //if ( nListLang.EqualsIgnoreCaseAscii("en-US") ) {
1668cdf0e10cSrcweir if ( Export::isSourceLanguage( nListLang ) ) {
1669cdf0e10cSrcweir if( nList == LIST_PAIRED ){
1670cdf0e10cSrcweir (*pCurEntry)[ SOURCE_LANGUAGE ] = rLine;
1671cdf0e10cSrcweir }
1672cdf0e10cSrcweir else
1673cdf0e10cSrcweir (*pCurEntry)[ SOURCE_LANGUAGE ] = rLine;
1674cdf0e10cSrcweir
1675cdf0e10cSrcweir pList->NewSourceLanguageListEntry();
1676cdf0e10cSrcweir }
1677cdf0e10cSrcweir
1678cdf0e10cSrcweir //printf("Export::InsertListEntry ResData.id = %s ResData.ListData = %s\n",pResData->sId.GetBuffer() ,(*pCurEntry)[ nListLang ].GetBuffer());
1679cdf0e10cSrcweir nListIndex++;
1680cdf0e10cSrcweir }
1681cdf0e10cSrcweir
1682cdf0e10cSrcweir /*****************************************************************************/
CleanValue(ByteString & rValue)1683cdf0e10cSrcweir void Export::CleanValue( ByteString &rValue )
1684cdf0e10cSrcweir /*****************************************************************************/
1685cdf0e10cSrcweir {
1686cdf0e10cSrcweir while ( rValue.Len()) {
1687cdf0e10cSrcweir if (( rValue.GetChar( 0 ) == ' ' ) || ( rValue.GetChar( 0 ) == '\t' ))
1688cdf0e10cSrcweir rValue = rValue.Copy( 1 );
1689cdf0e10cSrcweir else
1690cdf0e10cSrcweir break;
1691cdf0e10cSrcweir }
1692cdf0e10cSrcweir
1693cdf0e10cSrcweir if ( rValue.Len()) {
1694cdf0e10cSrcweir for ( sal_uInt16 i = rValue.Len() - 1; i > 0; i-- ) {
1695cdf0e10cSrcweir if (( rValue.GetChar( i ) == ' ' ) || ( rValue.GetChar( i ) == '\t' ) ||
1696cdf0e10cSrcweir ( rValue.GetChar( i ) == '\n' ) || ( rValue.GetChar( i ) == ';' ) ||
1697cdf0e10cSrcweir ( rValue.GetChar( i ) == '{' ) || ( rValue.GetChar( i ) == '\\' ) ||
1698cdf0e10cSrcweir ( rValue.GetChar( i ) == '\r' ))
1699cdf0e10cSrcweir rValue.Erase( i );
1700cdf0e10cSrcweir else
1701cdf0e10cSrcweir break;
1702cdf0e10cSrcweir }
1703cdf0e10cSrcweir }
1704cdf0e10cSrcweir }
1705cdf0e10cSrcweir
1706cdf0e10cSrcweir
1707cdf0e10cSrcweir /*****************************************************************************/
GetText(const ByteString & rSource,int nToken)1708cdf0e10cSrcweir ByteString Export::GetText( const ByteString &rSource, int nToken )
1709cdf0e10cSrcweir /*****************************************************************************/
1710cdf0e10cSrcweir #define TXT_STATE_NON 0x000
1711cdf0e10cSrcweir #define TXT_STATE_TEXT 0x001
1712cdf0e10cSrcweir #define TXT_STATE_MACRO 0x002
1713cdf0e10cSrcweir {
1714cdf0e10cSrcweir ByteString sReturn;
1715cdf0e10cSrcweir switch ( nToken ) {
1716cdf0e10cSrcweir case TEXTLINE:
1717cdf0e10cSrcweir case LONGTEXTLINE: {
1718cdf0e10cSrcweir ByteString sTmp( rSource.Copy( rSource.Search( "=" )));
1719cdf0e10cSrcweir CleanValue( sTmp );
1720cdf0e10cSrcweir sTmp.EraseAllChars( '\n' );
1721cdf0e10cSrcweir sTmp.EraseAllChars( '\r' );
1722cdf0e10cSrcweir
1723cdf0e10cSrcweir while ( sTmp.SearchAndReplace( "\\\\\"", "-=<[BSlashBSlashHKom]>=-\"" )
1724cdf0e10cSrcweir != STRING_NOTFOUND ) {};
1725cdf0e10cSrcweir while ( sTmp.SearchAndReplace( "\\\"", "-=<[Hochkomma]>=-" )
1726cdf0e10cSrcweir != STRING_NOTFOUND ) {};
1727cdf0e10cSrcweir while ( sTmp.SearchAndReplace( "\\", "-=<[0x7F]>=-" )
1728cdf0e10cSrcweir != STRING_NOTFOUND ) {};
1729cdf0e10cSrcweir while ( sTmp.SearchAndReplace( "\\0x7F", "-=<[0x7F]>=-" )
1730cdf0e10cSrcweir != STRING_NOTFOUND ) {};
1731cdf0e10cSrcweir
1732cdf0e10cSrcweir sal_uInt16 nStart = 0;
1733cdf0e10cSrcweir sal_uInt16 nState = TXT_STATE_MACRO;
1734cdf0e10cSrcweir
1735cdf0e10cSrcweir nState = TXT_STATE_TEXT;
1736cdf0e10cSrcweir nStart = 1;
1737cdf0e10cSrcweir
1738cdf0e10cSrcweir
1739cdf0e10cSrcweir for ( sal_uInt16 i = nStart; i < sTmp.GetTokenCount( '\"' ); i++ ) {
1740cdf0e10cSrcweir ByteString sToken = sTmp.GetToken( i, '\"' );
1741cdf0e10cSrcweir if ( sToken.Len()) {
1742cdf0e10cSrcweir if ( nState == TXT_STATE_TEXT ) {
1743cdf0e10cSrcweir sReturn += sToken;
1744cdf0e10cSrcweir nState = TXT_STATE_MACRO;
1745cdf0e10cSrcweir }
1746cdf0e10cSrcweir else {
1747cdf0e10cSrcweir while( sToken.SearchAndReplace( "\t", " " ) !=
1748cdf0e10cSrcweir STRING_NOTFOUND ) {};
1749cdf0e10cSrcweir while( sToken.SearchAndReplace( " ", " " ) !=
1750cdf0e10cSrcweir STRING_NOTFOUND ) {};
1751cdf0e10cSrcweir sToken.EraseLeadingChars( ' ' );
1752cdf0e10cSrcweir sToken.EraseTrailingChars( ' ' );
1753cdf0e10cSrcweir if ( sToken.Len()) {
1754cdf0e10cSrcweir sReturn += "\\\" ";
1755cdf0e10cSrcweir sReturn += sToken;
1756cdf0e10cSrcweir sReturn += " \\\"";
1757cdf0e10cSrcweir }
1758cdf0e10cSrcweir nState = TXT_STATE_TEXT;
1759cdf0e10cSrcweir }
1760cdf0e10cSrcweir }
1761cdf0e10cSrcweir }
1762cdf0e10cSrcweir
1763cdf0e10cSrcweir while ( sReturn.SearchAndReplace( "-=<[0x7F]>=-", "" )
1764cdf0e10cSrcweir != STRING_NOTFOUND ) {};
1765cdf0e10cSrcweir while ( sReturn.SearchAndReplace( "-=<[Hochkomma]>=-", "\"" )
1766cdf0e10cSrcweir != STRING_NOTFOUND ) {};
1767cdf0e10cSrcweir while ( sReturn.SearchAndReplace( "-=<[BSlashBSlashHKom]>=-", "\\\\" )
1768cdf0e10cSrcweir != STRING_NOTFOUND ) {};
1769cdf0e10cSrcweir
1770cdf0e10cSrcweir
1771cdf0e10cSrcweir while ( sReturn.SearchAndReplace( "\\\\", "-=<[BSlashBSlash]>=-" )
1772cdf0e10cSrcweir != STRING_NOTFOUND ) {};
1773cdf0e10cSrcweir while ( sReturn.SearchAndReplace( "-=<[BSlashBSlash]>=-", "\\" )
1774cdf0e10cSrcweir != STRING_NOTFOUND ) {};
1775cdf0e10cSrcweir
1776cdf0e10cSrcweir }
1777cdf0e10cSrcweir break;
1778cdf0e10cSrcweir }
1779cdf0e10cSrcweir return sReturn;
1780cdf0e10cSrcweir }
1781cdf0e10cSrcweir
1782cdf0e10cSrcweir /*****************************************************************************/
WriteToMerged(const ByteString & rText,bool bSDFContent)1783cdf0e10cSrcweir void Export::WriteToMerged( const ByteString &rText , bool bSDFContent )
1784cdf0e10cSrcweir /*****************************************************************************/
1785cdf0e10cSrcweir {
1786cdf0e10cSrcweir static ByteString SLASH ('\\');
1787cdf0e10cSrcweir static ByteString RETURN ('\n');
1788cdf0e10cSrcweir //printf("%s\n",rText.GetBuffer() );
1789cdf0e10cSrcweir
1790cdf0e10cSrcweir #if 0
1791cdf0e10cSrcweir // statement has no effect
1792cdf0e10cSrcweir if( pParseQueue->bMflag && !bSDFContent ) pParseQueue->bMflag;
1793cdf0e10cSrcweir #endif
1794cdf0e10cSrcweir
1795cdf0e10cSrcweir if ( !bDontWriteOutput || !bUnmerge ) {
1796cdf0e10cSrcweir ByteString sText( rText );
1797cdf0e10cSrcweir while ( sText.SearchAndReplace( " \n", "\n" ) != STRING_NOTFOUND ) {};
1798cdf0e10cSrcweir if( pParseQueue->bNextIsM && bSDFContent && sText.Len() > 2 ){
1799cdf0e10cSrcweir for( sal_uInt16 n = 0 ; n < sText.Len() ; n++ ){
1800cdf0e10cSrcweir if( sText.GetChar( n ) == '\n' && sText.GetChar( n-1 ) != '\\'){
1801cdf0e10cSrcweir sText.Insert('\\' , n++ );
1802cdf0e10cSrcweir
1803cdf0e10cSrcweir }
1804cdf0e10cSrcweir }
1805cdf0e10cSrcweir }
1806cdf0e10cSrcweir else if( pParseQueue->bLastWasM && sText.Len() > 2 ){
1807cdf0e10cSrcweir for( sal_uInt16 n = 0 ; n < sText.Len() ; n++ ){
1808cdf0e10cSrcweir if( sText.GetChar( n ) == '\n' && sText.GetChar( n-1 ) != '\\'){
1809cdf0e10cSrcweir sText.Insert('\\' , n++ );
1810cdf0e10cSrcweir }
1811cdf0e10cSrcweir if( sText.GetChar( n ) == '\n' )pParseQueue->bMflag=true;
1812cdf0e10cSrcweir }
1813cdf0e10cSrcweir }
1814cdf0e10cSrcweir else if( pParseQueue->bCurrentIsM && bSDFContent && sText.Len() > 2 ){
1815cdf0e10cSrcweir for( sal_uInt16 n = 0 ; n < sText.Len() ; n++ ){
1816cdf0e10cSrcweir if( sText.GetChar( n ) == '\n' && sText.GetChar( n-1 ) != '\\'){
1817cdf0e10cSrcweir sText.Insert('\\' , n++ );
1818cdf0e10cSrcweir pParseQueue->bMflag=true;
1819cdf0e10cSrcweir }
1820cdf0e10cSrcweir }
1821cdf0e10cSrcweir }
1822cdf0e10cSrcweir else if( pParseQueue->bMflag ){
1823cdf0e10cSrcweir for( sal_uInt16 n = 1 ; n < sText.Len() ; n++ ){
1824cdf0e10cSrcweir if( sText.GetChar( n ) == '\n' && sText.GetChar( n-1 ) != '\\'){
1825cdf0e10cSrcweir sText.Insert('\\' , n++ );
1826cdf0e10cSrcweir }
1827cdf0e10cSrcweir }
1828cdf0e10cSrcweir }
1829cdf0e10cSrcweir for ( sal_uInt16 i = 0; i < sText.Len(); i++ ) {
1830cdf0e10cSrcweir if ( sText.GetChar( i ) != '\n' ){
1831cdf0e10cSrcweir aOutput.Write( ByteString( sText.GetChar( i )).GetBuffer(), 1 );
1832cdf0e10cSrcweir
1833cdf0e10cSrcweir }
1834cdf0e10cSrcweir else{
1835cdf0e10cSrcweir aOutput.WriteLine( ByteString());
1836cdf0e10cSrcweir }
1837cdf0e10cSrcweir
1838cdf0e10cSrcweir }
1839cdf0e10cSrcweir }
1840cdf0e10cSrcweir }
1841cdf0e10cSrcweir
1842cdf0e10cSrcweir /*****************************************************************************/
ConvertMergeContent(ByteString & rText)1843cdf0e10cSrcweir void Export::ConvertMergeContent( ByteString &rText )
1844cdf0e10cSrcweir /*****************************************************************************/
1845cdf0e10cSrcweir {
1846cdf0e10cSrcweir sal_Bool bNoOpen = ( rText.Search( "\\\"" ) != 0 );
1847cdf0e10cSrcweir ByteString sClose( rText.Copy( rText.Len() - 2 ));
1848cdf0e10cSrcweir sal_Bool bNoClose = ( sClose != "\\\"" );
1849cdf0e10cSrcweir ByteString sNew;
1850cdf0e10cSrcweir for ( sal_uInt16 i = 0; i < rText.Len(); i++ ) {
1851cdf0e10cSrcweir ByteString sChar( rText.GetChar( i ));
1852cdf0e10cSrcweir if ( sChar == "\\" ) {
1853cdf0e10cSrcweir if (( i + 1 ) < rText.Len()) {
1854cdf0e10cSrcweir ByteString sNext( rText.GetChar( i + 1 ));
1855cdf0e10cSrcweir if ( sNext == "\"" ) {
1856cdf0e10cSrcweir sChar = "\"";
1857cdf0e10cSrcweir i++;
1858cdf0e10cSrcweir }
1859cdf0e10cSrcweir else if ( sNext == "n" ) {
1860cdf0e10cSrcweir sChar = "\\n";
1861cdf0e10cSrcweir i++;
1862cdf0e10cSrcweir }
1863cdf0e10cSrcweir else if ( sNext == "t" ) {
1864cdf0e10cSrcweir sChar = "\\t";
1865cdf0e10cSrcweir i++;
1866cdf0e10cSrcweir }
1867cdf0e10cSrcweir else if ( sNext == "\'" ) {
1868cdf0e10cSrcweir sChar = "\\\'";
1869cdf0e10cSrcweir i++;
1870cdf0e10cSrcweir }
1871cdf0e10cSrcweir else
1872cdf0e10cSrcweir sChar = "\\\\";
1873cdf0e10cSrcweir }
1874cdf0e10cSrcweir else {
1875cdf0e10cSrcweir sChar = "\\\\";
1876cdf0e10cSrcweir }
1877cdf0e10cSrcweir }
1878cdf0e10cSrcweir else if ( sChar == "\"" ) {
1879cdf0e10cSrcweir sChar = "\\\"";
1880cdf0e10cSrcweir }
1881cdf0e10cSrcweir else if ( sChar == "" ) {
1882cdf0e10cSrcweir sChar = "\\0x7F";
1883cdf0e10cSrcweir }
1884cdf0e10cSrcweir sNew += sChar;
1885cdf0e10cSrcweir }
1886cdf0e10cSrcweir
1887cdf0e10cSrcweir rText = sNew;
1888cdf0e10cSrcweir
1889cdf0e10cSrcweir if ( bNoOpen ) {
1890cdf0e10cSrcweir ByteString sTmp( rText );
1891cdf0e10cSrcweir rText = "\"";
1892cdf0e10cSrcweir rText += sTmp;
1893cdf0e10cSrcweir }
1894cdf0e10cSrcweir if ( bNoClose )
1895cdf0e10cSrcweir rText += "\"";
1896cdf0e10cSrcweir }
1897cdf0e10cSrcweir
1898cdf0e10cSrcweir /*****************************************************************************/
PrepareTextToMerge(ByteString & rText,sal_uInt16 nTyp,ByteString & nLangIndex,ResData * pResData)1899cdf0e10cSrcweir sal_Bool Export::PrepareTextToMerge( ByteString &rText, sal_uInt16 nTyp,
1900cdf0e10cSrcweir ByteString &nLangIndex, ResData *pResData )
1901cdf0e10cSrcweir /*****************************************************************************/
1902cdf0e10cSrcweir {
1903cdf0e10cSrcweir // position to merge in:
1904cdf0e10cSrcweir sal_uInt16 nStart = 0;
1905cdf0e10cSrcweir sal_uInt16 nEnd = 0;
1906cdf0e10cSrcweir ByteString sOldId = pResData->sId;
1907cdf0e10cSrcweir ByteString sOldGId = pResData->sGId;
1908cdf0e10cSrcweir ByteString sOldTyp = pResData->sResTyp;
1909cdf0e10cSrcweir
1910cdf0e10cSrcweir ByteString sOrigText( rText );
1911cdf0e10cSrcweir
1912cdf0e10cSrcweir switch ( nTyp ) {
1913cdf0e10cSrcweir case LIST_STRING :
1914cdf0e10cSrcweir case LIST_UIENTRIES :
1915cdf0e10cSrcweir case LIST_FILTER :
1916cdf0e10cSrcweir case LIST_PAIRED:
1917cdf0e10cSrcweir case LIST_ITEM :
1918cdf0e10cSrcweir {
1919cdf0e10cSrcweir if ( bUnmerge )
1920cdf0e10cSrcweir return sal_True;
1921cdf0e10cSrcweir
1922cdf0e10cSrcweir ExportList *pList = NULL;
1923cdf0e10cSrcweir switch ( nTyp ) {
1924cdf0e10cSrcweir case LIST_STRING : {
1925cdf0e10cSrcweir pResData->sResTyp = "stringlist";
1926cdf0e10cSrcweir pList = pResData->pStringList;
1927cdf0e10cSrcweir }
1928cdf0e10cSrcweir break;
1929cdf0e10cSrcweir case LIST_UIENTRIES : {
1930cdf0e10cSrcweir pResData->sResTyp = "uientries";
1931cdf0e10cSrcweir pList = pResData->pUIEntries;
1932cdf0e10cSrcweir }
1933cdf0e10cSrcweir break;
1934cdf0e10cSrcweir case LIST_FILTER : {
1935cdf0e10cSrcweir pResData->sResTyp = "filterlist";
1936cdf0e10cSrcweir pList = pResData->pFilterList;
1937cdf0e10cSrcweir }
1938cdf0e10cSrcweir break;
1939cdf0e10cSrcweir case LIST_ITEM : {
1940cdf0e10cSrcweir pResData->sResTyp = "itemlist";
1941cdf0e10cSrcweir pList = pResData->pItemList;
1942cdf0e10cSrcweir }
1943cdf0e10cSrcweir break;
1944cdf0e10cSrcweir case LIST_PAIRED : {
1945cdf0e10cSrcweir pResData->sResTyp = "pairedlist";
1946cdf0e10cSrcweir pList = pResData->pPairedList;
1947cdf0e10cSrcweir }
1948cdf0e10cSrcweir break;
1949cdf0e10cSrcweir
1950cdf0e10cSrcweir }
1951cdf0e10cSrcweir if ( pList ) {
1952cdf0e10cSrcweir ExportListEntry *pCurEntry = pList->GetObject( nListIndex - 1 );
1953cdf0e10cSrcweir if ( pCurEntry ) {
1954cdf0e10cSrcweir //printf("%s\n",Export::DumpMap( "pCurEntry", *pCurEntry ).GetBuffer() );
1955cdf0e10cSrcweir //ByteString a("pCurEntry");
1956cdf0e10cSrcweir //Export::DumpMap( a , *pCurEntry );
1957cdf0e10cSrcweir rText = (*pCurEntry)[ SOURCE_LANGUAGE ];
1958cdf0e10cSrcweir if( nTyp == LIST_PAIRED ){
1959cdf0e10cSrcweir pResData->addMergedLanguage( nLangIndex );
1960cdf0e10cSrcweir }
1961cdf0e10cSrcweir }
1962cdf0e10cSrcweir }
1963cdf0e10cSrcweir
1964cdf0e10cSrcweir nStart = rText.Search( "\"" );
1965cdf0e10cSrcweir if ( nStart == STRING_NOTFOUND ) {
1966cdf0e10cSrcweir rText = sOrigText;
1967cdf0e10cSrcweir return sal_False;
1968cdf0e10cSrcweir }
1969cdf0e10cSrcweir
1970cdf0e10cSrcweir sal_Bool bFound = sal_False;
1971cdf0e10cSrcweir for ( nEnd = nStart + 1; nEnd < rText.Len() && !bFound; nEnd++ ) {
1972cdf0e10cSrcweir if ( rText.GetChar( nEnd ) == '\"' )
1973cdf0e10cSrcweir bFound = sal_True;
1974cdf0e10cSrcweir }
1975cdf0e10cSrcweir if ( !bFound ) {
1976cdf0e10cSrcweir rText = sOrigText;
1977cdf0e10cSrcweir return sal_False;
1978cdf0e10cSrcweir }
1979cdf0e10cSrcweir
1980cdf0e10cSrcweir nEnd --;
1981cdf0e10cSrcweir sLastListLine = rText;
1982cdf0e10cSrcweir if (( sLastListLine.Search( ">" ) != STRING_NOTFOUND ) &&
1983cdf0e10cSrcweir ( sLastListLine.Search( "<" ) == STRING_NOTFOUND ))
1984cdf0e10cSrcweir {
1985cdf0e10cSrcweir ByteString sTmp = sLastListLine;
1986cdf0e10cSrcweir sLastListLine = "<";
1987cdf0e10cSrcweir sLastListLine += sTmp;
1988cdf0e10cSrcweir }
1989cdf0e10cSrcweir if ( pResData->sResTyp.EqualsIgnoreCaseAscii( "pairedlist" ) ){
1990cdf0e10cSrcweir pResData->sId = GetPairedListID( sLastListLine );
1991cdf0e10cSrcweir }
1992cdf0e10cSrcweir else pResData->sId = ByteString::CreateFromInt32( nListIndex );
1993cdf0e10cSrcweir
1994cdf0e10cSrcweir if ( pResData->sGId.Len())
1995cdf0e10cSrcweir pResData->sGId += ".";
1996cdf0e10cSrcweir pResData->sGId += sOldId;
1997cdf0e10cSrcweir nTyp = STRING_TYP_TEXT;
1998cdf0e10cSrcweir }
1999cdf0e10cSrcweir break;
2000cdf0e10cSrcweir case STRING_TYP_TEXT :
2001cdf0e10cSrcweir case STRING_TYP_HELPTEXT :
2002cdf0e10cSrcweir case STRING_TYP_QUICKHELPTEXT :
2003cdf0e10cSrcweir case STRING_TYP_TITLE :
2004cdf0e10cSrcweir {
2005cdf0e10cSrcweir /*if ( bUnmerge ) {
2006cdf0e10cSrcweir if (( nLangIndex != ByteString("de") ) &&
2007cdf0e10cSrcweir ( nLangIndex != ByteString("en-US") ))
2008cdf0e10cSrcweir {
2009cdf0e10cSrcweir bDontWriteOutput = sal_True;
2010cdf0e10cSrcweir }
2011cdf0e10cSrcweir return sal_True;
2012cdf0e10cSrcweir }*/
2013cdf0e10cSrcweir
2014cdf0e10cSrcweir nStart = rText.Search( "=" );
2015cdf0e10cSrcweir if ( nStart == STRING_NOTFOUND ) {
2016cdf0e10cSrcweir rText = sOrigText;
2017cdf0e10cSrcweir return sal_False;
2018cdf0e10cSrcweir }
2019cdf0e10cSrcweir
2020cdf0e10cSrcweir nStart++;
2021cdf0e10cSrcweir sal_Bool bFound = sal_False;
2022cdf0e10cSrcweir while(( nStart < rText.Len()) && !bFound ) {
2023cdf0e10cSrcweir if (( rText.GetChar( nStart ) != ' ' ) && ( rText.GetChar( nStart ) != '\t' ))
2024cdf0e10cSrcweir bFound = sal_True;
2025cdf0e10cSrcweir else
2026cdf0e10cSrcweir nStart ++;
2027cdf0e10cSrcweir }
2028cdf0e10cSrcweir
2029cdf0e10cSrcweir // no start position found
2030cdf0e10cSrcweir if ( !bFound ) {
2031cdf0e10cSrcweir rText = sOrigText;
2032cdf0e10cSrcweir return sal_False;
2033cdf0e10cSrcweir }
2034cdf0e10cSrcweir
2035cdf0e10cSrcweir // position to end mergeing in
2036cdf0e10cSrcweir nEnd = rText.Len() - 1;
2037cdf0e10cSrcweir bFound = sal_False;
2038cdf0e10cSrcweir
2039cdf0e10cSrcweir while (( nEnd > nStart ) && !bFound ) {
2040cdf0e10cSrcweir if (( rText.GetChar( nEnd ) != ' ' ) && ( rText.GetChar( nEnd ) != '\t' ) &&
2041cdf0e10cSrcweir ( rText.GetChar( nEnd ) != '\n' ) && ( rText.GetChar( nEnd ) != ';' ) &&
2042cdf0e10cSrcweir ( rText.GetChar( nEnd ) != '{' ) && ( rText.GetChar( nEnd ) != '\\' ))
2043cdf0e10cSrcweir {
2044cdf0e10cSrcweir bFound = sal_True;
2045cdf0e10cSrcweir }
2046cdf0e10cSrcweir else
2047cdf0e10cSrcweir nEnd --;
2048cdf0e10cSrcweir }
2049cdf0e10cSrcweir }
2050cdf0e10cSrcweir break;
2051cdf0e10cSrcweir }
2052cdf0e10cSrcweir
2053cdf0e10cSrcweir // search for merge data
2054cdf0e10cSrcweir if ( !pMergeDataFile ){
2055cdf0e10cSrcweir pMergeDataFile = new MergeDataFile( sMergeSrc, sFile , bErrorLog, aCharSet);//, bUTF8 );
2056cdf0e10cSrcweir
2057cdf0e10cSrcweir // Init Languages
2058cdf0e10cSrcweir ByteString sTmp = Export::sLanguages;
2059cdf0e10cSrcweir if( sTmp.ToUpperAscii().Equals("ALL") )
2060cdf0e10cSrcweir SetLanguages( pMergeDataFile->GetLanguages() );
2061cdf0e10cSrcweir else if( !isInitialized )InitLanguages();
2062cdf0e10cSrcweir
2063cdf0e10cSrcweir }
2064cdf0e10cSrcweir // printf("*************DUMPING****************\n");
2065cdf0e10cSrcweir // printf("%s\n",pMergeDataFile->Dump().GetBuffer());
2066cdf0e10cSrcweir // printf("*************DUMPING****************\n");
2067cdf0e10cSrcweir
2068cdf0e10cSrcweir // printf("Dumping ResData\n");
2069cdf0e10cSrcweir // pResData->Dump();
2070cdf0e10cSrcweir PFormEntrys *pEntrys = pMergeDataFile->GetPFormEntrys( pResData );
2071cdf0e10cSrcweir //printf("Dumping pEntrys\n");
2072cdf0e10cSrcweir //if( pEntrys ) pEntrys->Dump();
2073cdf0e10cSrcweir pResData->sId = sOldId;
2074cdf0e10cSrcweir pResData->sGId = sOldGId;
2075cdf0e10cSrcweir pResData->sResTyp = sOldTyp;
2076cdf0e10cSrcweir
2077cdf0e10cSrcweir if ( !pEntrys ) {
2078cdf0e10cSrcweir rText = sOrigText;
2079cdf0e10cSrcweir return sal_False; // no data found
2080cdf0e10cSrcweir }
2081cdf0e10cSrcweir
2082cdf0e10cSrcweir ByteString sContent;
2083cdf0e10cSrcweir pEntrys->GetTransex3Text( sContent, nTyp, nLangIndex );
2084cdf0e10cSrcweir //if ( !sContent.Len() && ( ! nLangIndex.EqualsIgnoreCaseAscii("en-US") )) {
2085cdf0e10cSrcweir if ( !sContent.Len() && ( ! Export::isSourceLanguage( nLangIndex ) )) {
2086cdf0e10cSrcweir rText = sOrigText;
2087cdf0e10cSrcweir return sal_False; // no data found
2088cdf0e10cSrcweir }
2089cdf0e10cSrcweir
2090cdf0e10cSrcweir //if ( nLangIndex.EqualsIgnoreCaseAscii("en-US") ) {
2091cdf0e10cSrcweir if ( Export::isSourceLanguage( nLangIndex ) ) {
2092cdf0e10cSrcweir return sal_False;
2093cdf0e10cSrcweir }
2094cdf0e10cSrcweir
2095cdf0e10cSrcweir ByteString sPostFix( rText.Copy( ++nEnd ));
2096cdf0e10cSrcweir rText.Erase( nStart );
2097cdf0e10cSrcweir
2098cdf0e10cSrcweir //ConvertMergeContent( sContent, nTyp );
2099cdf0e10cSrcweir ConvertMergeContent( sContent );
2100cdf0e10cSrcweir
2101cdf0e10cSrcweir
2102cdf0e10cSrcweir
2103cdf0e10cSrcweir //printf("Merged %s\n",nLangIndex.GetBuffer());
2104cdf0e10cSrcweir // merge new res. in text line
2105cdf0e10cSrcweir rText += sContent;
2106cdf0e10cSrcweir rText += sPostFix;
2107cdf0e10cSrcweir
2108cdf0e10cSrcweir return sal_True;
2109cdf0e10cSrcweir }
2110cdf0e10cSrcweir
2111cdf0e10cSrcweir /*****************************************************************************/
MergeRest(ResData * pResData,sal_uInt16 nMode)2112cdf0e10cSrcweir void Export::MergeRest( ResData *pResData, sal_uInt16 nMode )
2113cdf0e10cSrcweir /*****************************************************************************/
2114cdf0e10cSrcweir {
2115cdf0e10cSrcweir //if ( bUnmerge ) { return;}
2116cdf0e10cSrcweir
2117cdf0e10cSrcweir //pResData->Dump();
2118cdf0e10cSrcweir
2119cdf0e10cSrcweir if ( !pMergeDataFile ){
2120cdf0e10cSrcweir pMergeDataFile = new MergeDataFile( sMergeSrc, sFile ,bErrorLog, aCharSet);//, bUTF8 );
2121cdf0e10cSrcweir
2122cdf0e10cSrcweir // Init Languages
2123cdf0e10cSrcweir ByteString sTmp = Export::sLanguages;
2124cdf0e10cSrcweir if( sTmp.ToUpperAscii().Equals("ALL") )
2125cdf0e10cSrcweir SetLanguages( pMergeDataFile->GetLanguages() );
2126cdf0e10cSrcweir else if( !isInitialized )InitLanguages();
2127cdf0e10cSrcweir
2128cdf0e10cSrcweir }
2129cdf0e10cSrcweir switch ( nMode ) {
2130cdf0e10cSrcweir case MERGE_MODE_NORMAL : {
2131cdf0e10cSrcweir PFormEntrys *pEntry = pMergeDataFile->GetPFormEntrys( pResData );
2132cdf0e10cSrcweir
2133cdf0e10cSrcweir bool bWriteNoSlash = false;
2134cdf0e10cSrcweir if ( pEntry && pResData->bText ) {
2135cdf0e10cSrcweir
2136cdf0e10cSrcweir sal_Bool bAddSemikolon = sal_False;
2137cdf0e10cSrcweir sal_Bool bFirst = sal_True;
2138cdf0e10cSrcweir ByteString sCur;
2139cdf0e10cSrcweir ByteString sTmp = Export::sLanguages;
2140cdf0e10cSrcweir
2141cdf0e10cSrcweir for( unsigned int n = 0; n < aLanguages.size(); n++ ){
2142cdf0e10cSrcweir sCur = aLanguages[ n ];
2143cdf0e10cSrcweir
2144cdf0e10cSrcweir ByteString sText;
2145cdf0e10cSrcweir sal_Bool bText = pEntry->GetTransex3Text( sText, STRING_TYP_TEXT, sCur , sal_True );
2146cdf0e10cSrcweir if ( bText && sText.Len() && sText != "-" ) {
2147cdf0e10cSrcweir ByteString sOutput;
2148cdf0e10cSrcweir if ( bNextMustBeDefineEOL) {
2149cdf0e10cSrcweir if ( bFirst )
2150cdf0e10cSrcweir sOutput += "\t\\\n";
2151cdf0e10cSrcweir else
2152cdf0e10cSrcweir sOutput += ";\t\\\n";
2153cdf0e10cSrcweir }
2154cdf0e10cSrcweir bFirst=sal_False;
2155cdf0e10cSrcweir sOutput += "\t";
2156cdf0e10cSrcweir sOutput += pResData->sTextTyp;
2157cdf0e10cSrcweir //if ( !sCur.EqualsIgnoreCaseAscii("en-US")) {
2158cdf0e10cSrcweir if ( ! Export::isSourceLanguage( sCur ) ) {
2159cdf0e10cSrcweir sOutput += "[ ";
2160cdf0e10cSrcweir sOutput += sCur;
2161cdf0e10cSrcweir sOutput += " ] ";
2162cdf0e10cSrcweir }
2163cdf0e10cSrcweir sOutput += "= ";
2164cdf0e10cSrcweir ConvertMergeContent( sText );
2165cdf0e10cSrcweir sOutput += sText;
2166cdf0e10cSrcweir
2167cdf0e10cSrcweir if ( bDefine && bWriteNoSlash )
2168cdf0e10cSrcweir sOutput += ";\n";
2169cdf0e10cSrcweir
2170cdf0e10cSrcweir if ( bDefine )
2171cdf0e10cSrcweir sOutput += ";\\\n";
2172cdf0e10cSrcweir else if ( !bNextMustBeDefineEOL )
2173cdf0e10cSrcweir sOutput += ";\n";
2174cdf0e10cSrcweir else
2175cdf0e10cSrcweir bAddSemikolon = sal_True;
2176cdf0e10cSrcweir for ( sal_uInt16 j = 1; j < nLevel; j++ )
2177cdf0e10cSrcweir sOutput += "\t";
2178cdf0e10cSrcweir WriteToMerged( sOutput , true );
2179cdf0e10cSrcweir }
2180cdf0e10cSrcweir }
2181cdf0e10cSrcweir
2182cdf0e10cSrcweir
2183cdf0e10cSrcweir if ( bAddSemikolon ) {
2184cdf0e10cSrcweir ByteString sOutput( ";" );
2185cdf0e10cSrcweir WriteToMerged( sOutput , false );
2186cdf0e10cSrcweir }
2187cdf0e10cSrcweir }
2188cdf0e10cSrcweir
2189cdf0e10cSrcweir if ( pEntry && pResData->bQuickHelpText ) {
2190cdf0e10cSrcweir sal_Bool bAddSemikolon = sal_False;
2191cdf0e10cSrcweir sal_Bool bFirst = sal_True;
2192cdf0e10cSrcweir ByteString sCur;
2193cdf0e10cSrcweir
2194cdf0e10cSrcweir for( unsigned int n = 0; n < aLanguages.size(); n++ ){
2195cdf0e10cSrcweir sCur = aLanguages[ n ];
2196cdf0e10cSrcweir
2197cdf0e10cSrcweir ByteString sText;
2198cdf0e10cSrcweir sal_Bool bText = pEntry->GetTransex3Text( sText, STRING_TYP_QUICKHELPTEXT, sCur, sal_True );
2199cdf0e10cSrcweir if ( bText && sText.Len() && sText != "-" ) {
2200cdf0e10cSrcweir ByteString sOutput;
2201cdf0e10cSrcweir if ( bNextMustBeDefineEOL) {
2202cdf0e10cSrcweir if ( bFirst )
2203cdf0e10cSrcweir sOutput += "\t\\\n";
2204cdf0e10cSrcweir else
2205cdf0e10cSrcweir sOutput += ";\t\\\n";
2206cdf0e10cSrcweir }
2207cdf0e10cSrcweir bFirst=sal_False;
2208cdf0e10cSrcweir sOutput += "\t";
2209cdf0e10cSrcweir sOutput += "QuickHelpText";
2210cdf0e10cSrcweir //if ( !sCur.EqualsIgnoreCaseAscii("en-US") ) {
2211cdf0e10cSrcweir if ( ! Export::isSourceLanguage( sCur ) ) {
2212cdf0e10cSrcweir sOutput += "[ ";
2213cdf0e10cSrcweir sOutput += sCur;
2214cdf0e10cSrcweir sOutput += " ] ";
2215cdf0e10cSrcweir }
2216cdf0e10cSrcweir sOutput += "= ";
2217cdf0e10cSrcweir ConvertMergeContent( sText );
2218cdf0e10cSrcweir sOutput += sText;
2219cdf0e10cSrcweir if ( bDefine )
2220cdf0e10cSrcweir sOutput += ";\\\n";
2221cdf0e10cSrcweir else if ( !bNextMustBeDefineEOL )
2222cdf0e10cSrcweir sOutput += ";\n";
2223cdf0e10cSrcweir else
2224cdf0e10cSrcweir bAddSemikolon = sal_True;
2225cdf0e10cSrcweir for ( sal_uInt16 j = 1; j < nLevel; j++ )
2226cdf0e10cSrcweir sOutput += "\t";
2227cdf0e10cSrcweir WriteToMerged( sOutput ,true );
2228cdf0e10cSrcweir }
2229cdf0e10cSrcweir }
2230cdf0e10cSrcweir if ( bAddSemikolon ) {
2231cdf0e10cSrcweir ByteString sOutput( ";" );
2232cdf0e10cSrcweir WriteToMerged( sOutput , false );
2233cdf0e10cSrcweir }
2234cdf0e10cSrcweir }
2235cdf0e10cSrcweir
2236cdf0e10cSrcweir if ( pEntry && pResData->bTitle ) {
2237cdf0e10cSrcweir sal_Bool bAddSemikolon = sal_False;
2238cdf0e10cSrcweir sal_Bool bFirst = sal_True;
2239cdf0e10cSrcweir ByteString sCur;
2240cdf0e10cSrcweir
2241cdf0e10cSrcweir for( unsigned int n = 0; n < aLanguages.size(); n++ ){
2242cdf0e10cSrcweir sCur = aLanguages[ n ];
2243cdf0e10cSrcweir
2244cdf0e10cSrcweir ByteString sText;
2245cdf0e10cSrcweir sal_Bool bText = pEntry->GetTransex3Text( sText, STRING_TYP_TITLE, sCur, sal_True );
2246cdf0e10cSrcweir if ( bText && sText.Len() && sText != "-" ) {
2247cdf0e10cSrcweir ByteString sOutput;
2248cdf0e10cSrcweir if ( bNextMustBeDefineEOL) {
2249cdf0e10cSrcweir if ( bFirst )
2250cdf0e10cSrcweir sOutput += "\t\\\n";
2251cdf0e10cSrcweir else
2252cdf0e10cSrcweir sOutput += ";\t\\\n";
2253cdf0e10cSrcweir }
2254cdf0e10cSrcweir bFirst=sal_False;
2255cdf0e10cSrcweir sOutput += "\t";
2256cdf0e10cSrcweir sOutput += "Title";
2257cdf0e10cSrcweir //if ( !sCur.EqualsIgnoreCaseAscii("en-US") ) {
2258cdf0e10cSrcweir if ( ! Export::isSourceLanguage( sCur ) ) {
2259cdf0e10cSrcweir sOutput += "[ ";
2260cdf0e10cSrcweir sOutput += sCur;
2261cdf0e10cSrcweir sOutput += " ] ";
2262cdf0e10cSrcweir }
2263cdf0e10cSrcweir sOutput += "= ";
2264cdf0e10cSrcweir ConvertMergeContent( sText );
2265cdf0e10cSrcweir sOutput += sText;
2266cdf0e10cSrcweir if ( bDefine )
2267cdf0e10cSrcweir sOutput += ";\\\n";
2268cdf0e10cSrcweir else if ( !bNextMustBeDefineEOL )
2269cdf0e10cSrcweir sOutput += ";\n";
2270cdf0e10cSrcweir else
2271cdf0e10cSrcweir bAddSemikolon = sal_True;
2272cdf0e10cSrcweir for ( sal_uInt16 j = 1; j < nLevel; j++ )
2273cdf0e10cSrcweir sOutput += "\t";
2274cdf0e10cSrcweir WriteToMerged( sOutput ,true );
2275cdf0e10cSrcweir }
2276cdf0e10cSrcweir }
2277cdf0e10cSrcweir if ( bAddSemikolon ) {
2278cdf0e10cSrcweir ByteString sOutput( ";" );
2279cdf0e10cSrcweir WriteToMerged( sOutput ,false);
2280cdf0e10cSrcweir }
2281cdf0e10cSrcweir }
2282cdf0e10cSrcweir // Merge Lists
2283cdf0e10cSrcweir
2284cdf0e10cSrcweir if ( pResData->bList ) {
2285cdf0e10cSrcweir //printf("Dumping ResData\n");
2286cdf0e10cSrcweir //pResData->Dump();
2287cdf0e10cSrcweir
2288cdf0e10cSrcweir bool bPairedList = false;
2289cdf0e10cSrcweir ByteString sOldId = pResData->sId;
2290cdf0e10cSrcweir ByteString sOldGId = pResData->sGId;
2291cdf0e10cSrcweir ByteString sOldTyp = pResData->sResTyp;
2292cdf0e10cSrcweir if ( pResData->sGId.Len())
2293cdf0e10cSrcweir pResData->sGId += ".";
2294cdf0e10cSrcweir pResData->sGId += sOldId;
2295cdf0e10cSrcweir ByteString sSpace;
2296cdf0e10cSrcweir for ( sal_uInt16 i = 1; i < nLevel-1; i++ )
2297cdf0e10cSrcweir sSpace += "\t";
2298cdf0e10cSrcweir for ( sal_uInt16 nT = LIST_STRING; nT <= LIST_UIENTRIES; nT++ ) {
2299cdf0e10cSrcweir ExportList *pList = NULL;
2300cdf0e10cSrcweir switch ( nT ) {
2301cdf0e10cSrcweir case LIST_STRING : pResData->sResTyp = "stringlist"; pList = pResData->pStringList; bPairedList = false; break;
2302cdf0e10cSrcweir case LIST_FILTER : pResData->sResTyp = "filterlist"; pList = pResData->pFilterList; bPairedList = false; break;
2303cdf0e10cSrcweir case LIST_UIENTRIES : pResData->sResTyp = "uientries"; pList = pResData->pUIEntries;bPairedList = false; break;
2304cdf0e10cSrcweir case LIST_ITEM : pResData->sResTyp = "itemlist"; pList = pResData->pItemList; bPairedList = false; break;
2305cdf0e10cSrcweir case LIST_PAIRED : pResData->sResTyp = "pairedlist"; pList = pResData->pPairedList; bPairedList = true; break;
2306cdf0e10cSrcweir }
2307cdf0e10cSrcweir ByteString sCur;
2308cdf0e10cSrcweir for( unsigned int n = 0; n < aLanguages.size(); n++ ){
2309cdf0e10cSrcweir sCur = aLanguages[ n ];
2310cdf0e10cSrcweir sal_uInt16 nIdx = 1;
2311cdf0e10cSrcweir
2312cdf0e10cSrcweir // Set matching pairedlist identifier
2313cdf0e10cSrcweir if( bPairedList && pResData->pPairedList && ( nIdx == 1 ) ){
2314cdf0e10cSrcweir ExportListEntry* pListE = ( ExportListEntry* ) pResData->pPairedList->GetObject( nIdx-1 );
2315cdf0e10cSrcweir pResData->sId = GetPairedListID ( (*pListE)[ SOURCE_LANGUAGE ] );
2316cdf0e10cSrcweir }
2317cdf0e10cSrcweir else
2318cdf0e10cSrcweir pResData->sId = ByteString("1");
2319cdf0e10cSrcweir
2320cdf0e10cSrcweir PFormEntrys *pEntrys;
2321cdf0e10cSrcweir sal_uLong nLIndex = 0;
2322cdf0e10cSrcweir sal_uLong nMaxIndex = 0;
2323cdf0e10cSrcweir if ( pList )
2324cdf0e10cSrcweir nMaxIndex = pList->GetSourceLanguageListEntryCount();
2325cdf0e10cSrcweir pEntrys = pMergeDataFile->GetPFormEntrys( pResData );
2326cdf0e10cSrcweir while( pEntrys && ( nLIndex < nMaxIndex )) {
2327cdf0e10cSrcweir //printf("Lang %s, List Index %d\n",sCur.GetBuffer(),(int)nLIndex);
2328cdf0e10cSrcweir ByteString sText;
2329cdf0e10cSrcweir sal_Bool bText;
2330cdf0e10cSrcweir bText = pEntrys->GetTransex3Text( sText, STRING_TYP_TEXT, sCur, sal_True );
2331cdf0e10cSrcweir if( !bText )
2332cdf0e10cSrcweir bText = pEntrys->GetTransex3Text( sText , STRING_TYP_TEXT, SOURCE_LANGUAGE , sal_False );
2333cdf0e10cSrcweir
2334cdf0e10cSrcweir // Use fallback, if data is missing in sdf file
2335cdf0e10cSrcweir //if( !bText && pResData->sResTyp.Equals( "pairedlist" ) ){
2336cdf0e10cSrcweir if( !bText && bPairedList ){
2337cdf0e10cSrcweir if( pResData->isMerged( sCur ) ) break;
2338cdf0e10cSrcweir const ByteString sPlist("pairedlist");
2339cdf0e10cSrcweir ByteString sKey = MergeDataFile::CreateKey( sPlist , pResData->sGId , pResData->sId , sFilename );
2340cdf0e10cSrcweir bText = pResData->getFallbackData( sKey , sText );
2341cdf0e10cSrcweir }else if ( !bText ){// new fallback
2342cdf0e10cSrcweir if( pResData->isMerged( sCur ) ) break;
2343cdf0e10cSrcweir const ByteString sPlist("list");
2344cdf0e10cSrcweir ByteString sKey = MergeDataFile::CreateKey( sPlist , pResData->sGId , pResData->sId , sFilename );
2345cdf0e10cSrcweir bText = pResData->getFallbackData( sKey , sText );
2346cdf0e10cSrcweir } // new fallback
2347cdf0e10cSrcweir
2348cdf0e10cSrcweir if ( bText && sText.Len()) {
2349cdf0e10cSrcweir //if( pEntrys ) pEntrys->Dump();
2350cdf0e10cSrcweir if ( nIdx == 1 ) {
2351cdf0e10cSrcweir ByteString sHead;
2352cdf0e10cSrcweir if ( bNextMustBeDefineEOL )
2353cdf0e10cSrcweir sHead = "\\\n\t";
2354cdf0e10cSrcweir sHead += sSpace;
2355cdf0e10cSrcweir switch ( nT ) {
2356cdf0e10cSrcweir case LIST_STRING : sHead += "StringList "; break;
2357cdf0e10cSrcweir case LIST_FILTER : sHead += "FilterList "; break;
2358cdf0e10cSrcweir case LIST_ITEM : sHead += "ItemList "; break;
2359cdf0e10cSrcweir case LIST_PAIRED : sHead += "PairedList "; break;
2360cdf0e10cSrcweir case LIST_UIENTRIES : sHead += "UIEntries "; break;
2361cdf0e10cSrcweir }
2362cdf0e10cSrcweir sHead += "[ ";
2363cdf0e10cSrcweir sHead += sCur;
2364cdf0e10cSrcweir sHead += " ] ";
2365cdf0e10cSrcweir //}
2366cdf0e10cSrcweir if ( bDefine || bNextMustBeDefineEOL ) {
2367cdf0e10cSrcweir sHead += "= \\\n";
2368cdf0e10cSrcweir sHead += sSpace;
2369cdf0e10cSrcweir sHead += "\t{\\\n\t";
2370cdf0e10cSrcweir }
2371cdf0e10cSrcweir else {
2372cdf0e10cSrcweir sHead += "= \n";
2373cdf0e10cSrcweir sHead += sSpace;
2374cdf0e10cSrcweir sHead += "\t{\n\t";
2375cdf0e10cSrcweir }
2376cdf0e10cSrcweir WriteToMerged( sHead , true);
2377cdf0e10cSrcweir }
2378cdf0e10cSrcweir ByteString sLine;
2379cdf0e10cSrcweir if ( pList && pList->GetObject( nLIndex ))
2380cdf0e10cSrcweir sLine = ( *pList->GetObject( nLIndex ))[ SOURCE_LANGUAGE ];
2381cdf0e10cSrcweir if ( !sLine.Len())
2382cdf0e10cSrcweir sLine = sLastListLine;
2383cdf0e10cSrcweir
2384cdf0e10cSrcweir if ( sLastListLine.Search( "<" ) != STRING_NOTFOUND ) {
2385cdf0e10cSrcweir if (( nT != LIST_UIENTRIES ) &&
2386cdf0e10cSrcweir (( sLine.Search( "{" ) == STRING_NOTFOUND ) ||
2387cdf0e10cSrcweir ( sLine.Search( "{" ) >= sLine.Search( "\"" ))) &&
2388cdf0e10cSrcweir (( sLine.Search( "<" ) == STRING_NOTFOUND ) ||
2389cdf0e10cSrcweir ( sLine.Search( "<" ) >= sLine.Search( "\"" ))))
2390cdf0e10cSrcweir {
2391cdf0e10cSrcweir sLine.SearchAndReplace( "\"", "< \"" );
2392cdf0e10cSrcweir }
2393cdf0e10cSrcweir }
2394cdf0e10cSrcweir
2395cdf0e10cSrcweir sal_uInt16 nStart, nEnd;
2396cdf0e10cSrcweir nStart = sLine.Search( "\"" );
2397cdf0e10cSrcweir
2398cdf0e10cSrcweir ByteString sPostFix;
2399cdf0e10cSrcweir if( !bPairedList ){
2400cdf0e10cSrcweir nEnd = sLine.SearchBackward( '\"' );
2401cdf0e10cSrcweir sPostFix = ByteString( sLine.Copy( ++nEnd ));
2402cdf0e10cSrcweir sLine.Erase( nStart );
2403cdf0e10cSrcweir }
2404cdf0e10cSrcweir
2405cdf0e10cSrcweir
2406cdf0e10cSrcweir ConvertMergeContent( sText );
2407cdf0e10cSrcweir
2408cdf0e10cSrcweir // merge new res. in text line
2409cdf0e10cSrcweir if( bPairedList ){
2410cdf0e10cSrcweir sLine = MergePairedList( sLine , sText );
2411cdf0e10cSrcweir }
2412cdf0e10cSrcweir else{
2413cdf0e10cSrcweir sLine += sText;
2414cdf0e10cSrcweir sLine += sPostFix;
2415cdf0e10cSrcweir }
2416cdf0e10cSrcweir
2417cdf0e10cSrcweir ByteString sText1( "\t" );
2418cdf0e10cSrcweir sText1 += sLine;
2419cdf0e10cSrcweir if ( bDefine || bNextMustBeDefineEOL )
2420cdf0e10cSrcweir sText1 += " ;\\\n";
2421cdf0e10cSrcweir else
2422cdf0e10cSrcweir sText1 += " ;\n";
2423cdf0e10cSrcweir sText1 += sSpace;
2424cdf0e10cSrcweir sText1 += "\t";
2425cdf0e10cSrcweir //printf("Writing '%s'\n",sText1.GetBuffer());
2426cdf0e10cSrcweir WriteToMerged( sText1 ,true );
2427cdf0e10cSrcweir
2428cdf0e10cSrcweir // Set matching pairedlist identifier
2429cdf0e10cSrcweir if ( bPairedList ){
2430cdf0e10cSrcweir nIdx++;
2431cdf0e10cSrcweir ExportListEntry* pListE = ( ExportListEntry* ) pResData->pPairedList->GetObject( ( nIdx ) -1 );
2432cdf0e10cSrcweir if( pListE ){
2433cdf0e10cSrcweir pResData->sId = GetPairedListID ( (*pListE)[ SOURCE_LANGUAGE ] );
2434cdf0e10cSrcweir }
2435cdf0e10cSrcweir }
2436cdf0e10cSrcweir else
2437cdf0e10cSrcweir pResData->sId = ByteString::CreateFromInt32( ++nIdx );
2438cdf0e10cSrcweir }
2439cdf0e10cSrcweir else
2440cdf0e10cSrcweir break;
2441cdf0e10cSrcweir nLIndex ++;
2442cdf0e10cSrcweir PFormEntrys *oldEntry = pEntrys;
2443cdf0e10cSrcweir pEntrys = pMergeDataFile->GetPFormEntrys( pResData ); // <--- game over
2444cdf0e10cSrcweir if( !pEntrys )
2445cdf0e10cSrcweir pEntrys = oldEntry;
2446cdf0e10cSrcweir }
2447cdf0e10cSrcweir if ( nIdx > 1 ) {
2448cdf0e10cSrcweir ByteString sFooter( sSpace.Copy( 1 ));
2449cdf0e10cSrcweir if ( bNextMustBeDefineEOL )
2450cdf0e10cSrcweir sFooter += "};";
2451cdf0e10cSrcweir else if ( !bDefine )
2452cdf0e10cSrcweir sFooter += "};\n\t";
2453cdf0e10cSrcweir else
2454cdf0e10cSrcweir sFooter += "\n\n";
2455cdf0e10cSrcweir WriteToMerged( sFooter ,true );
2456cdf0e10cSrcweir }
2457cdf0e10cSrcweir }
2458cdf0e10cSrcweir }
2459cdf0e10cSrcweir
2460cdf0e10cSrcweir pResData->sId = sOldId;
2461cdf0e10cSrcweir pResData->sGId = sOldGId;
2462cdf0e10cSrcweir pResData->sResTyp = sOldTyp;
2463cdf0e10cSrcweir }
2464cdf0e10cSrcweir }
2465cdf0e10cSrcweir break;
2466cdf0e10cSrcweir case MERGE_MODE_LIST : {
2467cdf0e10cSrcweir ExportList *pList = NULL;
2468cdf0e10cSrcweir switch ( nList ) {
2469cdf0e10cSrcweir // PairedList
2470cdf0e10cSrcweir case LIST_STRING : pList = pResData->pStringList; break;
2471cdf0e10cSrcweir case LIST_FILTER : pList = pResData->pFilterList; break;
2472cdf0e10cSrcweir case LIST_UIENTRIES : pList = pResData->pUIEntries; break;
2473cdf0e10cSrcweir case LIST_ITEM : pList = pResData->pItemList; break;
2474cdf0e10cSrcweir case LIST_PAIRED : pList = pResData->pPairedList; break;
2475cdf0e10cSrcweir
2476cdf0e10cSrcweir }
2477cdf0e10cSrcweir
2478cdf0e10cSrcweir nListIndex++;
2479cdf0e10cSrcweir sal_uLong nMaxIndex = 0;
2480cdf0e10cSrcweir if ( pList )
2481cdf0e10cSrcweir nMaxIndex = pList->GetSourceLanguageListEntryCount();
2482cdf0e10cSrcweir ByteString sLine;
2483cdf0e10cSrcweir if ( pList && pList->GetObject( nListIndex ))
2484cdf0e10cSrcweir sLine = ( *pList->GetObject( nListIndex ))[ SOURCE_LANGUAGE ];
2485cdf0e10cSrcweir if ( !sLine.Len())
2486cdf0e10cSrcweir sLine = sLastListLine;
2487cdf0e10cSrcweir
2488cdf0e10cSrcweir if ( sLastListLine.Search( "<" ) != STRING_NOTFOUND ) {
2489cdf0e10cSrcweir if (( nList != LIST_UIENTRIES ) &&
2490cdf0e10cSrcweir (( sLine.Search( "{" ) == STRING_NOTFOUND ) ||
2491cdf0e10cSrcweir ( sLine.Search( "{" ) >= sLine.Search( "\"" ))) &&
2492cdf0e10cSrcweir (( sLine.Search( "<" ) == STRING_NOTFOUND ) ||
2493cdf0e10cSrcweir ( sLine.Search( "<" ) >= sLine.Search( "\"" ))))
2494cdf0e10cSrcweir {
2495cdf0e10cSrcweir sLine.SearchAndReplace( "\"", "< \"" );
2496cdf0e10cSrcweir }
2497cdf0e10cSrcweir }
2498cdf0e10cSrcweir
2499cdf0e10cSrcweir while( PrepareTextToMerge( sLine, nList, nListLang, pResData ) && ( nListIndex <= nMaxIndex )) {
2500cdf0e10cSrcweir ByteString sText( "\t" );
2501cdf0e10cSrcweir sText += sLine;
2502cdf0e10cSrcweir sText += " ;";
2503cdf0e10cSrcweir sText += "\n";
2504cdf0e10cSrcweir for ( sal_uInt16 i = 0; i < nLevel; i++ )
2505cdf0e10cSrcweir sText += "\t";
2506cdf0e10cSrcweir WriteToMerged( sText ,false );
2507cdf0e10cSrcweir nListIndex++;
2508cdf0e10cSrcweir if ( pList && pList->GetObject( nListIndex ))
2509cdf0e10cSrcweir sLine = ( *pList->GetObject( nListIndex ))[ SOURCE_LANGUAGE ];
2510cdf0e10cSrcweir if ( !sLine.Len())
2511cdf0e10cSrcweir sLine = sLastListLine;
2512cdf0e10cSrcweir sLine += " ;";
2513cdf0e10cSrcweir }
2514cdf0e10cSrcweir }
2515cdf0e10cSrcweir break;
2516cdf0e10cSrcweir }
2517cdf0e10cSrcweir pParseQueue->bMflag = false;
2518cdf0e10cSrcweir }
2519cdf0e10cSrcweir
MergePairedList(ByteString & sLine,ByteString & sText)2520cdf0e10cSrcweir ByteString Export::MergePairedList( ByteString& sLine , ByteString& sText ){
2521cdf0e10cSrcweir // < "xy" ; IDENTIFIER ; >
2522cdf0e10cSrcweir ByteString sPre = sLine.Copy( 0 , sLine.Search('\"') );
2523cdf0e10cSrcweir ByteString sPost = sLine.Copy( sLine.SearchBackward('\"') + 1 , sLine.Len() );
2524cdf0e10cSrcweir sPre.Append( sText );
2525cdf0e10cSrcweir sPre.Append( sPost );
2526cdf0e10cSrcweir return sPre;
2527cdf0e10cSrcweir }
2528cdf0e10cSrcweir
2529cdf0e10cSrcweir /*****************************************************************************/
SetChildWithText()2530cdf0e10cSrcweir void Export::SetChildWithText()
2531cdf0e10cSrcweir /*****************************************************************************/
2532cdf0e10cSrcweir {
2533cdf0e10cSrcweir if ( aResStack.Count() > 1 ) {
2534cdf0e10cSrcweir for ( sal_uLong i = 0; i < aResStack.Count() - 1; i++ ) {
2535cdf0e10cSrcweir aResStack.GetObject( i )->bChildWithText = sal_True;
2536cdf0e10cSrcweir }
2537cdf0e10cSrcweir }
2538cdf0e10cSrcweir }
2539cdf0e10cSrcweir
Push(const QueueEntry & aEntry)2540cdf0e10cSrcweir void ParserQueue::Push( const QueueEntry& aEntry ){
2541cdf0e10cSrcweir // printf("nTyp = %d ",aEntry.nTyp);
2542cdf0e10cSrcweir sal_uInt16 nLen = aEntry.sLine.Len();
2543cdf0e10cSrcweir
2544cdf0e10cSrcweir if( !bStart ){
2545cdf0e10cSrcweir aQueueCur->push( aEntry );
2546cdf0e10cSrcweir if( nLen > 1 && aEntry.sLine.GetChar( nLen-1 ) == '\n' )
2547cdf0e10cSrcweir bStart = true;
2548cdf0e10cSrcweir else if ( aEntry.nTyp != IGNOREDTOKENS ){
2549cdf0e10cSrcweir if( nLen > 1 && ( aEntry.sLine.GetChar( nLen-1 ) == '\\') ){
2550cdf0e10cSrcweir // Next is Macro
2551cdf0e10cSrcweir bCurrentIsM = true;
2552cdf0e10cSrcweir }else{
2553cdf0e10cSrcweir // Next is no Macro
2554cdf0e10cSrcweir bCurrentIsM = false;
2555cdf0e10cSrcweir }
2556cdf0e10cSrcweir }
2557cdf0e10cSrcweir }
2558cdf0e10cSrcweir else{
2559cdf0e10cSrcweir aQueueNext->push( aEntry );
2560cdf0e10cSrcweir if( nLen > 1 && aEntry.sLine.GetChar( nLen-1 ) != '\n' ){
2561cdf0e10cSrcweir if( nLen > 1 && ( aEntry.sLine.GetChar( nLen-1 ) == '\\') ){
2562cdf0e10cSrcweir // Next is Macro
2563cdf0e10cSrcweir bNextIsM = true;
2564cdf0e10cSrcweir }
2565cdf0e10cSrcweir else{
2566cdf0e10cSrcweir // Next is no Macro
2567cdf0e10cSrcweir bNextIsM = false;
2568cdf0e10cSrcweir }
2569cdf0e10cSrcweir }else if( nLen > 2 && aEntry.sLine.GetChar( nLen-1 ) == '\n' ){
2570cdf0e10cSrcweir if( aEntry.nTyp != IGNOREDTOKENS ){
2571cdf0e10cSrcweir if( nLen > 2 && ( aEntry.sLine.GetChar( nLen-2 ) == '\\') ){
2572cdf0e10cSrcweir // Next is Macro
2573cdf0e10cSrcweir bNextIsM = true;
2574cdf0e10cSrcweir }
2575cdf0e10cSrcweir else{
2576cdf0e10cSrcweir // Next is no Macro
2577cdf0e10cSrcweir bNextIsM = false;
2578cdf0e10cSrcweir }
2579cdf0e10cSrcweir }
2580cdf0e10cSrcweir // Pop current
2581cdf0e10cSrcweir Pop( *aQueueCur );
2582cdf0e10cSrcweir bLastWasM = bCurrentIsM;
2583cdf0e10cSrcweir // next -> current
2584cdf0e10cSrcweir bCurrentIsM = bNextIsM;
2585cdf0e10cSrcweir aQref = aQueueCur;
2586cdf0e10cSrcweir aQueueCur = aQueueNext;
2587cdf0e10cSrcweir aQueueNext = aQref;
2588cdf0e10cSrcweir
2589cdf0e10cSrcweir }
2590cdf0e10cSrcweir
2591cdf0e10cSrcweir else{
2592cdf0e10cSrcweir // Pop current
2593cdf0e10cSrcweir Pop( *aQueueCur );
2594cdf0e10cSrcweir bLastWasM = bCurrentIsM;
2595cdf0e10cSrcweir // next -> current
2596cdf0e10cSrcweir bCurrentIsM = bNextIsM;
2597cdf0e10cSrcweir aQref = aQueueCur;
2598cdf0e10cSrcweir aQueueCur = aQueueNext;
2599cdf0e10cSrcweir aQueueNext = aQref;
2600cdf0e10cSrcweir }
2601cdf0e10cSrcweir }
2602cdf0e10cSrcweir }
2603cdf0e10cSrcweir
Close()2604cdf0e10cSrcweir void ParserQueue::Close(){
2605cdf0e10cSrcweir // Pop current
2606cdf0e10cSrcweir Pop( *aQueueCur );
2607cdf0e10cSrcweir // next -> current
2608cdf0e10cSrcweir bLastWasM = bCurrentIsM;
2609cdf0e10cSrcweir bCurrentIsM = bNextIsM;
2610cdf0e10cSrcweir aQref = aQueueCur;
2611cdf0e10cSrcweir aQueueCur = aQueueNext;
2612cdf0e10cSrcweir aQueueNext = aQref;
2613cdf0e10cSrcweir bNextIsM = false;
2614cdf0e10cSrcweir Pop( *aQueueNext );
2615cdf0e10cSrcweir };
Pop(std::queue<QueueEntry> & aQueue)2616cdf0e10cSrcweir void ParserQueue::Pop( std::queue<QueueEntry>& aQueue ){
2617cdf0e10cSrcweir while( !aQueue.empty() ){
2618cdf0e10cSrcweir QueueEntry aEntry = aQueue.front();
2619cdf0e10cSrcweir aQueue.pop();
2620cdf0e10cSrcweir aExport.Execute( aEntry.nTyp , (char*) aEntry.sLine.GetBuffer() );
2621cdf0e10cSrcweir }
2622cdf0e10cSrcweir }
ParserQueue(Export & aExportObj)2623cdf0e10cSrcweir ParserQueue::ParserQueue( Export& aExportObj )
2624cdf0e10cSrcweir :
2625cdf0e10cSrcweir bCurrentIsM( false ),
2626cdf0e10cSrcweir bNextIsM( false ) ,
2627cdf0e10cSrcweir bLastWasM( false ),
2628cdf0e10cSrcweir bMflag( false ) ,
2629cdf0e10cSrcweir aExport( aExportObj ) ,
2630cdf0e10cSrcweir bStart( false ) ,
2631cdf0e10cSrcweir bStartNext( false )
2632cdf0e10cSrcweir {
2633cdf0e10cSrcweir aQueueNext = new std::queue<QueueEntry>;
2634cdf0e10cSrcweir aQueueCur = new std::queue<QueueEntry>;
2635cdf0e10cSrcweir }
2636cdf0e10cSrcweir
2637cdf0e10cSrcweir
~ParserQueue()2638cdf0e10cSrcweir ParserQueue::~ParserQueue(){
2639cdf0e10cSrcweir if( aQueueNext ) delete aQueueNext;
2640cdf0e10cSrcweir if( aQueueCur ) delete aQueueCur;
2641cdf0e10cSrcweir }
2642