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