xref: /aoo4110/main/l10ntools/inc/export.hxx (revision b1cdbd2c)
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 #ifndef _EXPORT_HXX
25*b1cdbd2cSJim Jagielski #define _EXPORT_HXX
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski #include <l10ntools/directory.hxx>
28*b1cdbd2cSJim Jagielski 
29*b1cdbd2cSJim Jagielski #include <tagtest.hxx>
30*b1cdbd2cSJim Jagielski 
31*b1cdbd2cSJim Jagielski // #define MERGE_SOURCE_LANGUAGES <- To merge en-US and de resource
32*b1cdbd2cSJim Jagielski 
33*b1cdbd2cSJim Jagielski #include <tools/string.hxx>
34*b1cdbd2cSJim Jagielski #include <tools/list.hxx>
35*b1cdbd2cSJim Jagielski #include <tools/stream.hxx>
36*b1cdbd2cSJim Jagielski #include <tools/fsys.hxx>
37*b1cdbd2cSJim Jagielski #include <osl/file.hxx>
38*b1cdbd2cSJim Jagielski #include <osl/file.h>
39*b1cdbd2cSJim Jagielski 
40*b1cdbd2cSJim Jagielski #include <hash_map> /* std::hashmap*/
41*b1cdbd2cSJim Jagielski #include <iterator> /* std::iterator*/
42*b1cdbd2cSJim Jagielski #include <set>      /* std::set*/
43*b1cdbd2cSJim Jagielski #include <vector>   /* std::vector*/
44*b1cdbd2cSJim Jagielski #include <queue>
45*b1cdbd2cSJim Jagielski #include <string>
46*b1cdbd2cSJim Jagielski 
47*b1cdbd2cSJim Jagielski #include <unistd.h>
48*b1cdbd2cSJim Jagielski #ifdef WNT
49*b1cdbd2cSJim Jagielski #include <direct.h>
50*b1cdbd2cSJim Jagielski #endif
51*b1cdbd2cSJim Jagielski 
52*b1cdbd2cSJim Jagielski #define NO_TRANSLATE_ISO		"x-no-translate"
53*b1cdbd2cSJim Jagielski 
54*b1cdbd2cSJim Jagielski #define JAPANESE_ISO "ja"
55*b1cdbd2cSJim Jagielski 
56*b1cdbd2cSJim Jagielski class PFormEntrys;
57*b1cdbd2cSJim Jagielski class MergeData;
58*b1cdbd2cSJim Jagielski typedef std::set<ByteString , lessByteString > ByteStringSet;
59*b1cdbd2cSJim Jagielski 
60*b1cdbd2cSJim Jagielski typedef std::hash_map<ByteString , ByteString , hashByteString,equalByteString>
61*b1cdbd2cSJim Jagielski                                 ByteStringHashMap;
62*b1cdbd2cSJim Jagielski 
63*b1cdbd2cSJim Jagielski typedef std::hash_map<ByteString , bool , hashByteString,equalByteString>
64*b1cdbd2cSJim Jagielski                                 ByteStringBoolHashMap;
65*b1cdbd2cSJim Jagielski 
66*b1cdbd2cSJim Jagielski typedef std::hash_map<ByteString , PFormEntrys* , hashByteString,equalByteString>
67*b1cdbd2cSJim Jagielski                                 PFormEntrysHashMap;
68*b1cdbd2cSJim Jagielski 
69*b1cdbd2cSJim Jagielski typedef std::hash_map<ByteString , MergeData* , hashByteString,equalByteString>
70*b1cdbd2cSJim Jagielski                                 MergeDataHashMap;
71*b1cdbd2cSJim Jagielski 
72*b1cdbd2cSJim Jagielski #define SOURCE_LANGUAGE ByteString("en-US")
73*b1cdbd2cSJim Jagielski #define LIST_REFID  "LIST_REFID"
74*b1cdbd2cSJim Jagielski 
75*b1cdbd2cSJim Jagielski typedef ByteStringHashMap ExportListEntry;
76*b1cdbd2cSJim Jagielski 
77*b1cdbd2cSJim Jagielski DECLARE_LIST( ExportListBase, ExportListEntry * )
78*b1cdbd2cSJim Jagielski 
79*b1cdbd2cSJim Jagielski //
80*b1cdbd2cSJim Jagielski // class ExportList
81*b1cdbd2cSJim Jagielski //
82*b1cdbd2cSJim Jagielski 
83*b1cdbd2cSJim Jagielski class ExportList : public ExportListBase
84*b1cdbd2cSJim Jagielski {
85*b1cdbd2cSJim Jagielski private:
86*b1cdbd2cSJim Jagielski 	sal_uLong nSourceLanguageListEntryCount;
87*b1cdbd2cSJim Jagielski 
88*b1cdbd2cSJim Jagielski public:
ExportList()89*b1cdbd2cSJim Jagielski 	ExportList() : ExportListBase() { nSourceLanguageListEntryCount = 0; }
GetSourceLanguageListEntryCount()90*b1cdbd2cSJim Jagielski 	sal_uLong GetSourceLanguageListEntryCount() { return nSourceLanguageListEntryCount; }
NewSourceLanguageListEntry()91*b1cdbd2cSJim Jagielski 	void NewSourceLanguageListEntry() { nSourceLanguageListEntryCount++; }
92*b1cdbd2cSJim Jagielski };
93*b1cdbd2cSJim Jagielski 
94*b1cdbd2cSJim Jagielski #define REFID_NONE 0xFFFF
95*b1cdbd2cSJim Jagielski 
96*b1cdbd2cSJim Jagielski //
97*b1cdbd2cSJim Jagielski // struct ResData
98*b1cdbd2cSJim Jagielski //
99*b1cdbd2cSJim Jagielski 
100*b1cdbd2cSJim Jagielski /******************************************************************************
101*b1cdbd2cSJim Jagielski * Purpose: holds mandatory data to export a single res (used with ResStack)
102*b1cdbd2cSJim Jagielski ******************************************************************************/
103*b1cdbd2cSJim Jagielski 
104*b1cdbd2cSJim Jagielski #define ID_LEVEL_NULL		0x0000
105*b1cdbd2cSJim Jagielski #define ID_LEVEL_AUTOID		0x0001
106*b1cdbd2cSJim Jagielski #define ID_LEVEL_TEXT		0x0002
107*b1cdbd2cSJim Jagielski #define ID_LEVEL_FIELDNAME	0x0003
108*b1cdbd2cSJim Jagielski #define ID_LEVEL_ACCESSPATH	0x0004
109*b1cdbd2cSJim Jagielski #define ID_LEVEL_IDENTIFIER 0x0005
110*b1cdbd2cSJim Jagielski #define ID_LEVEL_LISTINDEX	0x0006
111*b1cdbd2cSJim Jagielski 
112*b1cdbd2cSJim Jagielski class ResData
113*b1cdbd2cSJim Jagielski {
114*b1cdbd2cSJim Jagielski public:
115*b1cdbd2cSJim Jagielski 	~ResData();
116*b1cdbd2cSJim Jagielski 	sal_Bool SetId( const ByteString &rId, sal_uInt16 nLevel );
117*b1cdbd2cSJim Jagielski 
118*b1cdbd2cSJim Jagielski     sal_uInt16 nWidth;
119*b1cdbd2cSJim Jagielski 	sal_uInt16 nChildIndex;
120*b1cdbd2cSJim Jagielski 	sal_uInt16 nIdLevel;
121*b1cdbd2cSJim Jagielski 	sal_Bool bChild;
122*b1cdbd2cSJim Jagielski 	sal_Bool bChildWithText;
123*b1cdbd2cSJim Jagielski 
124*b1cdbd2cSJim Jagielski 	sal_Bool bText;
125*b1cdbd2cSJim Jagielski 	sal_Bool bHelpText;
126*b1cdbd2cSJim Jagielski 	sal_Bool bQuickHelpText;
127*b1cdbd2cSJim Jagielski 	sal_Bool bTitle;
128*b1cdbd2cSJim Jagielski 	sal_Bool bList;
129*b1cdbd2cSJim Jagielski 
130*b1cdbd2cSJim Jagielski 	sal_Bool bRestMerged;
131*b1cdbd2cSJim Jagielski 
132*b1cdbd2cSJim Jagielski     ByteString sResTyp;
133*b1cdbd2cSJim Jagielski 	ByteString sId;
134*b1cdbd2cSJim Jagielski 	ByteString sGId;
135*b1cdbd2cSJim Jagielski 	ByteString sHelpId;
136*b1cdbd2cSJim Jagielski 	ByteString sFilename;
137*b1cdbd2cSJim Jagielski 
138*b1cdbd2cSJim Jagielski     ByteStringHashMap sText;
139*b1cdbd2cSJim Jagielski     sal_uInt16 nTextRefId;
140*b1cdbd2cSJim Jagielski 
141*b1cdbd2cSJim Jagielski 	ByteStringHashMap sHelpText;
142*b1cdbd2cSJim Jagielski     sal_uInt16 nHelpTextRefId;
143*b1cdbd2cSJim Jagielski 
144*b1cdbd2cSJim Jagielski 	ByteStringHashMap sQuickHelpText;
145*b1cdbd2cSJim Jagielski     sal_uInt16 nQuickHelpTextRefId;
146*b1cdbd2cSJim Jagielski 
147*b1cdbd2cSJim Jagielski 	ByteStringHashMap sTitle;
148*b1cdbd2cSJim Jagielski     sal_uInt16 nTitleRefId;
149*b1cdbd2cSJim Jagielski 
150*b1cdbd2cSJim Jagielski 	ByteString sTextTyp;
151*b1cdbd2cSJim Jagielski 	ByteStringHashMap aFallbackData;
152*b1cdbd2cSJim Jagielski 	ByteStringHashMap aMergedLanguages;
153*b1cdbd2cSJim Jagielski 
154*b1cdbd2cSJim Jagielski 	ExportList	*pStringList;
155*b1cdbd2cSJim Jagielski 	ExportList	*pUIEntries;
156*b1cdbd2cSJim Jagielski 	ExportList	*pItemList;
157*b1cdbd2cSJim Jagielski     ExportList	*pFilterList;
158*b1cdbd2cSJim Jagielski     ExportList  *pPairedList;
159*b1cdbd2cSJim Jagielski 
160*b1cdbd2cSJim Jagielski     ByteString sPForm;
161*b1cdbd2cSJim Jagielski 
162*b1cdbd2cSJim Jagielski 	void Dump();
163*b1cdbd2cSJim Jagielski 	void addFallbackData( ByteString& sId , const ByteString& sText );
164*b1cdbd2cSJim Jagielski 	bool getFallbackData( ByteString& sId , ByteString& sText);
165*b1cdbd2cSJim Jagielski 
166*b1cdbd2cSJim Jagielski 	void addMergedLanguage( ByteString& sLang );
167*b1cdbd2cSJim Jagielski 	bool isMerged( ByteString& sLang );
ResData(const ByteString & rPF,const ByteString & rGId)168*b1cdbd2cSJim Jagielski 	ResData( const ByteString &rPF, const ByteString &rGId )
169*b1cdbd2cSJim Jagielski 			:
170*b1cdbd2cSJim Jagielski             nWidth( 0 ),
171*b1cdbd2cSJim Jagielski             nChildIndex( 0 ),
172*b1cdbd2cSJim Jagielski             nIdLevel( ID_LEVEL_NULL ),
173*b1cdbd2cSJim Jagielski             bChild( sal_False ),
174*b1cdbd2cSJim Jagielski             bChildWithText( sal_False ),
175*b1cdbd2cSJim Jagielski             bText( sal_False ),
176*b1cdbd2cSJim Jagielski             bHelpText( sal_False ),
177*b1cdbd2cSJim Jagielski             bQuickHelpText( sal_False ),
178*b1cdbd2cSJim Jagielski             bTitle( sal_False ),
179*b1cdbd2cSJim Jagielski             bList( sal_False ),
180*b1cdbd2cSJim Jagielski             bRestMerged( sal_False ),
181*b1cdbd2cSJim Jagielski             sGId( rGId ),
182*b1cdbd2cSJim Jagielski             nTextRefId( REFID_NONE ),
183*b1cdbd2cSJim Jagielski             nHelpTextRefId( REFID_NONE ),
184*b1cdbd2cSJim Jagielski             nQuickHelpTextRefId( REFID_NONE ),
185*b1cdbd2cSJim Jagielski             nTitleRefId( REFID_NONE ),
186*b1cdbd2cSJim Jagielski             sTextTyp( "Text" ),
187*b1cdbd2cSJim Jagielski             pStringList( NULL ),
188*b1cdbd2cSJim Jagielski             pUIEntries( NULL ),
189*b1cdbd2cSJim Jagielski             pItemList( NULL ),
190*b1cdbd2cSJim Jagielski             pFilterList( NULL ),
191*b1cdbd2cSJim Jagielski             pPairedList( NULL ),
192*b1cdbd2cSJim Jagielski             sPForm( rPF )
193*b1cdbd2cSJim Jagielski 	{
194*b1cdbd2cSJim Jagielski 		sGId.EraseAllChars( '\r' );
195*b1cdbd2cSJim Jagielski 		sPForm.EraseAllChars( '\r' );
196*b1cdbd2cSJim Jagielski 	};
ResData(const ByteString & rPF,const ByteString & rGId,const ByteString & rFilename)197*b1cdbd2cSJim Jagielski 	ResData( const ByteString &rPF, const ByteString &rGId , const ByteString &rFilename )
198*b1cdbd2cSJim Jagielski 			:
199*b1cdbd2cSJim Jagielski             nChildIndex( 0 ),
200*b1cdbd2cSJim Jagielski             nIdLevel( ID_LEVEL_NULL ),
201*b1cdbd2cSJim Jagielski             bChild( sal_False ),
202*b1cdbd2cSJim Jagielski             bChildWithText( sal_False ),
203*b1cdbd2cSJim Jagielski             bText( sal_False ),
204*b1cdbd2cSJim Jagielski             bHelpText( sal_False ),
205*b1cdbd2cSJim Jagielski             bQuickHelpText( sal_False ),
206*b1cdbd2cSJim Jagielski             bTitle( sal_False ),
207*b1cdbd2cSJim Jagielski             bList( sal_False ),
208*b1cdbd2cSJim Jagielski             bRestMerged( sal_False ),
209*b1cdbd2cSJim Jagielski             sGId( rGId ),
210*b1cdbd2cSJim Jagielski             sFilename( rFilename ),
211*b1cdbd2cSJim Jagielski             nTextRefId( REFID_NONE ),
212*b1cdbd2cSJim Jagielski             nHelpTextRefId( REFID_NONE ),
213*b1cdbd2cSJim Jagielski             nQuickHelpTextRefId( REFID_NONE ),
214*b1cdbd2cSJim Jagielski             nTitleRefId( REFID_NONE ),
215*b1cdbd2cSJim Jagielski             sTextTyp( "Text" ),
216*b1cdbd2cSJim Jagielski             pStringList( NULL ),
217*b1cdbd2cSJim Jagielski             pUIEntries( NULL ),
218*b1cdbd2cSJim Jagielski             pItemList( NULL ),
219*b1cdbd2cSJim Jagielski             pFilterList( NULL ),
220*b1cdbd2cSJim Jagielski             pPairedList( NULL ),
221*b1cdbd2cSJim Jagielski             sPForm( rPF )
222*b1cdbd2cSJim Jagielski 
223*b1cdbd2cSJim Jagielski 	{
224*b1cdbd2cSJim Jagielski 		sGId.EraseAllChars( '\r' );
225*b1cdbd2cSJim Jagielski 		sPForm.EraseAllChars( '\r' );
226*b1cdbd2cSJim Jagielski 	};
227*b1cdbd2cSJim Jagielski 
228*b1cdbd2cSJim Jagielski 
229*b1cdbd2cSJim Jagielski };
230*b1cdbd2cSJim Jagielski 
231*b1cdbd2cSJim Jagielski 
232*b1cdbd2cSJim Jagielski //
233*b1cdbd2cSJim Jagielski // class Export
234*b1cdbd2cSJim Jagielski //
235*b1cdbd2cSJim Jagielski 
236*b1cdbd2cSJim Jagielski /******************************************************************************
237*b1cdbd2cSJim Jagielski * Purpose: syntax check and export of *.src, called from lexer
238*b1cdbd2cSJim Jagielski ******************************************************************************/
239*b1cdbd2cSJim Jagielski 
240*b1cdbd2cSJim Jagielski #define LIST_NON 					0x0000
241*b1cdbd2cSJim Jagielski #define LIST_STRING 				0x0001
242*b1cdbd2cSJim Jagielski #define LIST_FILTER					0x0002
243*b1cdbd2cSJim Jagielski #define LIST_ITEM					0x0004
244*b1cdbd2cSJim Jagielski #define LIST_PAIRED                 0x0005
245*b1cdbd2cSJim Jagielski #define LIST_UIENTRIES				0x0008
246*b1cdbd2cSJim Jagielski #define STRING_TYP_TEXT				0x0010
247*b1cdbd2cSJim Jagielski #define	STRING_TYP_HELPTEXT			0x0020
248*b1cdbd2cSJim Jagielski #define STRING_TYP_QUICKHELPTEXT	0x0040
249*b1cdbd2cSJim Jagielski #define STRING_TYP_TITLE			0x0080
250*b1cdbd2cSJim Jagielski 
251*b1cdbd2cSJim Jagielski #define MERGE_MODE_NORMAL			0x0000
252*b1cdbd2cSJim Jagielski #define MERGE_MODE_LIST				0x0001
253*b1cdbd2cSJim Jagielski 
254*b1cdbd2cSJim Jagielski DECLARE_LIST( ResStack, ResData * )
255*b1cdbd2cSJim Jagielski // forwards
256*b1cdbd2cSJim Jagielski class WordTransformer;
257*b1cdbd2cSJim Jagielski class ParserQueue;
258*b1cdbd2cSJim Jagielski 
259*b1cdbd2cSJim Jagielski class Export
260*b1cdbd2cSJim Jagielski {
261*b1cdbd2cSJim Jagielski private:
262*b1cdbd2cSJim Jagielski 	WordTransformer	*pWordTransformer;
263*b1cdbd2cSJim Jagielski 
264*b1cdbd2cSJim Jagielski 	CharSet	aCharSet;					// used charset in src
265*b1cdbd2cSJim Jagielski 
266*b1cdbd2cSJim Jagielski 	SvFileStream aOutput;
267*b1cdbd2cSJim Jagielski 
268*b1cdbd2cSJim Jagielski 	ResStack aResStack;					// stack for parsing recursive
269*b1cdbd2cSJim Jagielski 
270*b1cdbd2cSJim Jagielski 	ByteString sActPForm;				// hold cur. system
271*b1cdbd2cSJim Jagielski 
272*b1cdbd2cSJim Jagielski 	sal_Bool bDefine;						// cur. res. in a define?
273*b1cdbd2cSJim Jagielski 	sal_Bool bNextMustBeDefineEOL;			// define but no \ at lineend
274*b1cdbd2cSJim Jagielski 	sal_uLong nLevel;						// res. recursiv? how deep?
275*b1cdbd2cSJim Jagielski 	sal_uInt16 nList;						// cur. res. is String- or FilterList
276*b1cdbd2cSJim Jagielski     ByteString nListLang;
277*b1cdbd2cSJim Jagielski     sal_uLong nListIndex;
278*b1cdbd2cSJim Jagielski 	sal_uLong nListLevel;
279*b1cdbd2cSJim Jagielski     bool bSkipFile;
280*b1cdbd2cSJim Jagielski 	ByteString sProject;
281*b1cdbd2cSJim Jagielski 	ByteString sRoot;
282*b1cdbd2cSJim Jagielski 	sal_Bool bEnableExport;
283*b1cdbd2cSJim Jagielski 	sal_Bool bMergeMode;
284*b1cdbd2cSJim Jagielski 	ByteString sMergeSrc;
285*b1cdbd2cSJim Jagielski 	ByteString sLastListLine;
286*b1cdbd2cSJim Jagielski 	sal_Bool bError;						// any errors while export?
287*b1cdbd2cSJim Jagielski 	sal_Bool bReadOver;
288*b1cdbd2cSJim Jagielski 	sal_Bool bDontWriteOutput;
289*b1cdbd2cSJim Jagielski 	ByteString sLastTextTyp;
290*b1cdbd2cSJim Jagielski     static bool isInitialized;
291*b1cdbd2cSJim Jagielski 	ByteString sFilename;
292*b1cdbd2cSJim Jagielski 
293*b1cdbd2cSJim Jagielski 
294*b1cdbd2cSJim Jagielski public:
295*b1cdbd2cSJim Jagielski 	ParserQueue* pParseQueue; // public ?
296*b1cdbd2cSJim Jagielski     static ByteString sLanguages; // public ?
297*b1cdbd2cSJim Jagielski     static ByteString sForcedLanguages; // public ?
298*b1cdbd2cSJim Jagielski 
299*b1cdbd2cSJim Jagielski 
300*b1cdbd2cSJim Jagielski     static bool skipProject( ByteString sPrj ) ;
301*b1cdbd2cSJim Jagielski 	static void InitLanguages( bool bMergeMode = false );
302*b1cdbd2cSJim Jagielski     static void InitForcedLanguages( bool bMergeMode = false );
303*b1cdbd2cSJim Jagielski     static std::vector<ByteString> GetLanguages();
304*b1cdbd2cSJim Jagielski     static std::vector<ByteString> GetForcedLanguages();
305*b1cdbd2cSJim Jagielski 
306*b1cdbd2cSJim Jagielski     static void SetLanguages( std::vector<ByteString> val );
307*b1cdbd2cSJim Jagielski     static void RemoveUTF8ByteOrderMarker( ByteString &rString );
308*b1cdbd2cSJim Jagielski     static bool hasUTF8ByteOrderMarker( const ByteString &rString );
309*b1cdbd2cSJim Jagielski     static void RemoveUTF8ByteOrderMarkerFromFile( const ByteString &rFilename );
310*b1cdbd2cSJim Jagielski     static bool fileHasUTF8ByteOrderMarker( const ByteString &rString );
311*b1cdbd2cSJim Jagielski 	static ByteString GetIsoLangByIndex( sal_uInt16 nIndex );
312*b1cdbd2cSJim Jagielski 	static void QuotHTML( ByteString &rString );
313*b1cdbd2cSJim Jagielski     static bool CopyFile( const ByteString& source , const ByteString& dest );
314*b1cdbd2cSJim Jagielski 
315*b1cdbd2cSJim Jagielski 	static void QuotHTMLXRM( ByteString &rString );
316*b1cdbd2cSJim Jagielski     static void UnquotHTML( ByteString &rString );
317*b1cdbd2cSJim Jagielski 
318*b1cdbd2cSJim Jagielski     static const char* GetEnv( const char *pVar );
319*b1cdbd2cSJim Jagielski 	static int getCurrentDirectory( rtl::OUString& base_fqurl , rtl::OUString& base );
320*b1cdbd2cSJim Jagielski 
321*b1cdbd2cSJim Jagielski     static bool isSourceLanguage( const ByteString &sLanguage );
322*b1cdbd2cSJim Jagielski 	static bool isAllowed( const ByteString &sLanguage );
323*b1cdbd2cSJim Jagielski 
324*b1cdbd2cSJim Jagielski     static bool LanguageAllowed( const ByteString &nLanguage );
325*b1cdbd2cSJim Jagielski     static void Languages( std::vector<ByteString>::const_iterator& begin , std::vector<ByteString>::const_iterator& end );
326*b1cdbd2cSJim Jagielski 	static void getRandomName( const ByteString& sPrefix , ByteString& sRandStr , const ByteString& sPostfix  );
327*b1cdbd2cSJim Jagielski     static void getRandomName( ByteString& sRandStr );
328*b1cdbd2cSJim Jagielski     static void getCurrentDir( std::string& dir );
329*b1cdbd2cSJim Jagielski 
330*b1cdbd2cSJim Jagielski     static void replaceEncoding( ByteString& rString );
331*b1cdbd2cSJim Jagielski 
332*b1cdbd2cSJim Jagielski 	static ByteString GetFallbackLanguage( const ByteString nLanguage );
333*b1cdbd2cSJim Jagielski 	static void FillInFallbacks( ResData *pResData );
334*b1cdbd2cSJim Jagielski     static void FillInListFallbacks( ExportList *pList, const ByteString &nSource, const ByteString &nFallback );
335*b1cdbd2cSJim Jagielski     static ByteString GetTimeStamp();
336*b1cdbd2cSJim Jagielski 	static sal_Bool ConvertLineEnds( ByteString sSource, ByteString sDestination );
337*b1cdbd2cSJim Jagielski 	static ByteString GetNativeFile( ByteString sSource );
338*b1cdbd2cSJim Jagielski 	static DirEntry GetTempFile();
339*b1cdbd2cSJim Jagielski 
340*b1cdbd2cSJim Jagielski 	static void DumpExportList( ByteString& sListName , ExportList& aList );
341*b1cdbd2cSJim Jagielski 	static ByteString DumpMap( ByteString& sMapName , ByteStringHashMap& aMap );
342*b1cdbd2cSJim Jagielski 
343*b1cdbd2cSJim Jagielski private:
344*b1cdbd2cSJim Jagielski     static std::vector<ByteString> aLanguages;
345*b1cdbd2cSJim Jagielski     static std::vector<ByteString> aForcedLanguages;
346*b1cdbd2cSJim Jagielski 
347*b1cdbd2cSJim Jagielski 	sal_Bool ListExists( ResData *pResData, sal_uInt16 nLst );
348*b1cdbd2cSJim Jagielski 
349*b1cdbd2cSJim Jagielski 	sal_Bool WriteData( ResData *pResData, sal_Bool bCreateNew = sal_False );// called befor dest. cur ResData
350*b1cdbd2cSJim Jagielski 	sal_Bool WriteExportList( ResData *pResData, ExportList *pExportList,
351*b1cdbd2cSJim Jagielski 						const ByteString &rTyp, sal_Bool bCreateNew = sal_False );
352*b1cdbd2cSJim Jagielski 
353*b1cdbd2cSJim Jagielski 	ByteString MergePairedList( ByteString& sLine , ByteString& sText );
354*b1cdbd2cSJim Jagielski 
355*b1cdbd2cSJim Jagielski 	ByteString FullId();					// creates cur. GID
356*b1cdbd2cSJim Jagielski 
357*b1cdbd2cSJim Jagielski 	bool PairedListFallback( ByteString& sText , ResData& aResData );
358*b1cdbd2cSJim Jagielski 
359*b1cdbd2cSJim Jagielski 	ByteString GetPairedListID		( const ByteString& sText );
360*b1cdbd2cSJim Jagielski     ByteString GetPairedListString	( const ByteString& sText );
361*b1cdbd2cSJim Jagielski 	ByteString StripList	( const ByteString& sText );
362*b1cdbd2cSJim Jagielski 
363*b1cdbd2cSJim Jagielski 	void UnmergeUTF8( ByteString& sOrig );
364*b1cdbd2cSJim Jagielski 	void InsertListEntry( const ByteString &rText, const ByteString &rLine );
365*b1cdbd2cSJim Jagielski 	void CleanValue( ByteString &rValue );
366*b1cdbd2cSJim Jagielski 	ByteString GetText( const ByteString &rSource, int nToken );
367*b1cdbd2cSJim Jagielski 
368*b1cdbd2cSJim Jagielski 	sal_Bool PrepareTextToMerge( ByteString &rText, sal_uInt16 nTyp,
369*b1cdbd2cSJim Jagielski 		ByteString &nLangIndex, ResData *pResData );
370*b1cdbd2cSJim Jagielski 
371*b1cdbd2cSJim Jagielski 	void MergeRest( ResData *pResData, sal_uInt16 nMode = MERGE_MODE_NORMAL );
372*b1cdbd2cSJim Jagielski 	void ConvertMergeContent( ByteString &rText );
373*b1cdbd2cSJim Jagielski 
374*b1cdbd2cSJim Jagielski   	void WriteToMerged( const ByteString &rText , bool bSDFContent );
375*b1cdbd2cSJim Jagielski 	void SetChildWithText();
376*b1cdbd2cSJim Jagielski 
377*b1cdbd2cSJim Jagielski 	void CutComment( ByteString &rText );
378*b1cdbd2cSJim Jagielski 
379*b1cdbd2cSJim Jagielski public:
380*b1cdbd2cSJim Jagielski 	Export( const ByteString &rOutput, sal_Bool bWrite,
381*b1cdbd2cSJim Jagielski 			const ByteString &rPrj, const ByteString &rPrjRoot , const ByteString& rFile );
382*b1cdbd2cSJim Jagielski 	Export( const ByteString &rOutput, sal_Bool bWrite,
383*b1cdbd2cSJim Jagielski 			const ByteString &rPrj, const ByteString &rPrjRoot,
384*b1cdbd2cSJim Jagielski 			const ByteString &rMergeSource , const ByteString& rFile );
385*b1cdbd2cSJim Jagielski 	~Export();
386*b1cdbd2cSJim Jagielski 
387*b1cdbd2cSJim Jagielski 	void Init();
388*b1cdbd2cSJim Jagielski 	int Execute( int nToken, const char * pToken );	// called from lexer
SetError()389*b1cdbd2cSJim Jagielski 	void SetError() { bError = sal_True; }
GetError()390*b1cdbd2cSJim Jagielski 	sal_Bool GetError() { return bError; }
391*b1cdbd2cSJim Jagielski };
392*b1cdbd2cSJim Jagielski 
393*b1cdbd2cSJim Jagielski 
394*b1cdbd2cSJim Jagielski //
395*b1cdbd2cSJim Jagielski // class PFormEntrys
396*b1cdbd2cSJim Jagielski //
397*b1cdbd2cSJim Jagielski 
398*b1cdbd2cSJim Jagielski /******************************************************************************
399*b1cdbd2cSJim Jagielski * Purpose: holds information of data to merge (one pform)
400*b1cdbd2cSJim Jagielski ******************************************************************************/
401*b1cdbd2cSJim Jagielski 
402*b1cdbd2cSJim Jagielski class PFormEntrys : public ByteString
403*b1cdbd2cSJim Jagielski {
404*b1cdbd2cSJim Jagielski friend class MergeDataFile;
405*b1cdbd2cSJim Jagielski private:
406*b1cdbd2cSJim Jagielski 	ByteString sHelpText; // empty string
407*b1cdbd2cSJim Jagielski 	ByteStringHashMap sText;
408*b1cdbd2cSJim Jagielski 	ByteStringBoolHashMap bTextFirst;
409*b1cdbd2cSJim Jagielski 	ByteStringHashMap sQuickHelpText;
410*b1cdbd2cSJim Jagielski 	ByteStringBoolHashMap bQuickHelpTextFirst;
411*b1cdbd2cSJim Jagielski 	ByteStringHashMap sTitle;
412*b1cdbd2cSJim Jagielski 	ByteStringBoolHashMap bTitleFirst;
413*b1cdbd2cSJim Jagielski 
414*b1cdbd2cSJim Jagielski public:
PFormEntrys(const ByteString & rPForm)415*b1cdbd2cSJim Jagielski 	PFormEntrys( const ByteString &rPForm ) : ByteString( rPForm ) {};
416*b1cdbd2cSJim Jagielski 	ByteString Dump();
InsertEntry(const ByteString & nId,const ByteString & rText,const ByteString & rQuickHelpText,const ByteString & rTitle)417*b1cdbd2cSJim Jagielski 	void InsertEntry(
418*b1cdbd2cSJim Jagielski                     const ByteString &nId ,
419*b1cdbd2cSJim Jagielski                     const ByteString &rText,
420*b1cdbd2cSJim Jagielski 					const ByteString &rQuickHelpText,
421*b1cdbd2cSJim Jagielski 					const ByteString &rTitle
422*b1cdbd2cSJim Jagielski                     )
423*b1cdbd2cSJim Jagielski 		{
424*b1cdbd2cSJim Jagielski 			sText[ nId ] = rText;
425*b1cdbd2cSJim Jagielski 			bTextFirst[ nId ] = true;
426*b1cdbd2cSJim Jagielski 			sQuickHelpText[ nId ] = rQuickHelpText;
427*b1cdbd2cSJim Jagielski 			bQuickHelpTextFirst[ nId ] = true;
428*b1cdbd2cSJim Jagielski 			sTitle[ nId ] = rTitle;
429*b1cdbd2cSJim Jagielski 			bTitleFirst[ nId ] = true;
430*b1cdbd2cSJim Jagielski 		}
431*b1cdbd2cSJim Jagielski      sal_Bool GetText( ByteString &rReturn, sal_uInt16 nTyp, const ByteString &nLangIndex, sal_Bool bDel = sal_False );
432*b1cdbd2cSJim Jagielski      sal_Bool GetTransex3Text( ByteString &rReturn, sal_uInt16 nTyp, const ByteString &nLangIndex, sal_Bool bDel = sal_False );
433*b1cdbd2cSJim Jagielski 
434*b1cdbd2cSJim Jagielski };
435*b1cdbd2cSJim Jagielski 
436*b1cdbd2cSJim Jagielski //
437*b1cdbd2cSJim Jagielski // class MergeData
438*b1cdbd2cSJim Jagielski //
439*b1cdbd2cSJim Jagielski 
440*b1cdbd2cSJim Jagielski /******************************************************************************
441*b1cdbd2cSJim Jagielski * Purpose: holds information of data to merge (one ressource)
442*b1cdbd2cSJim Jagielski ******************************************************************************/
443*b1cdbd2cSJim Jagielski 
444*b1cdbd2cSJim Jagielski class MergeDataFile;
445*b1cdbd2cSJim Jagielski 
446*b1cdbd2cSJim Jagielski class MergeData
447*b1cdbd2cSJim Jagielski {
448*b1cdbd2cSJim Jagielski friend class MergeDataFile;
449*b1cdbd2cSJim Jagielski private:
450*b1cdbd2cSJim Jagielski 	ByteString sTyp;
451*b1cdbd2cSJim Jagielski 	ByteString sGID;
452*b1cdbd2cSJim Jagielski 	ByteString sLID;
453*b1cdbd2cSJim Jagielski     ByteString sFilename;
454*b1cdbd2cSJim Jagielski     PFormEntrysHashMap aMap;
455*b1cdbd2cSJim Jagielski public:
MergeData(const ByteString & rTyp,const ByteString & rGID,const ByteString & rLID,const ByteString & rFilename)456*b1cdbd2cSJim Jagielski 	MergeData( const ByteString &rTyp, const ByteString &rGID, const ByteString &rLID , const ByteString &rFilename )
457*b1cdbd2cSJim Jagielski 			: sTyp( rTyp ), sGID( rGID ), sLID( rLID ) , sFilename( rFilename ) {};
458*b1cdbd2cSJim Jagielski 	~MergeData();
459*b1cdbd2cSJim Jagielski 	PFormEntrys* InsertEntry( const ByteString &rPForm );
460*b1cdbd2cSJim Jagielski 	PFormEntrys* GetPFormEntrys( ResData *pResData );
461*b1cdbd2cSJim Jagielski 
462*b1cdbd2cSJim Jagielski     void Insert( const ByteString& rPFO , PFormEntrys* pfEntrys );
463*b1cdbd2cSJim Jagielski     PFormEntrys* GetPFObject( const ByteString& rPFO );
464*b1cdbd2cSJim Jagielski 
465*b1cdbd2cSJim Jagielski 	ByteString Dump();
466*b1cdbd2cSJim Jagielski 	sal_Bool operator==( ResData *pData );
467*b1cdbd2cSJim Jagielski };
468*b1cdbd2cSJim Jagielski 
469*b1cdbd2cSJim Jagielski //
470*b1cdbd2cSJim Jagielski // class MergeDataFile
471*b1cdbd2cSJim Jagielski //
472*b1cdbd2cSJim Jagielski 
473*b1cdbd2cSJim Jagielski /******************************************************************************
474*b1cdbd2cSJim Jagielski * Purpose: holds information of data to merge
475*b1cdbd2cSJim Jagielski ******************************************************************************/
476*b1cdbd2cSJim Jagielski 
477*b1cdbd2cSJim Jagielski class MergeDataFile
478*b1cdbd2cSJim Jagielski {
479*b1cdbd2cSJim Jagielski     private:
480*b1cdbd2cSJim Jagielski         sal_Bool bErrorLog;
481*b1cdbd2cSJim Jagielski         ByteString sErrorLog;
482*b1cdbd2cSJim Jagielski         SvFileStream aErrLog;
483*b1cdbd2cSJim Jagielski         MergeDataHashMap aMap;
484*b1cdbd2cSJim Jagielski         std::set<ByteString> aLanguageSet;
485*b1cdbd2cSJim Jagielski 
486*b1cdbd2cSJim Jagielski         MergeData *GetMergeData( ResData *pResData , bool bCaseSensitve = false );
487*b1cdbd2cSJim Jagielski         void InsertEntry( const ByteString &rTYP, const ByteString &rGID, const ByteString &rLID,
488*b1cdbd2cSJim Jagielski             const ByteString &rPFO,
489*b1cdbd2cSJim Jagielski             const ByteString &nLang, const ByteString &rTEXT,
490*b1cdbd2cSJim Jagielski             const ByteString &rQHTEXT, const ByteString &rTITLE,
491*b1cdbd2cSJim Jagielski             const ByteString &sFilename, bool bCaseSensitive
492*b1cdbd2cSJim Jagielski             );
493*b1cdbd2cSJim Jagielski         ByteString Dump();
494*b1cdbd2cSJim Jagielski         void WriteError( const ByteString &rLine );
495*b1cdbd2cSJim Jagielski 
496*b1cdbd2cSJim Jagielski     public:
497*b1cdbd2cSJim Jagielski         MergeDataFile( const ByteString &rFileName, const ByteString& rFile , sal_Bool bErrLog, CharSet aCharSet, bool bCaseSensitive = false );
498*b1cdbd2cSJim Jagielski         ~MergeDataFile();
499*b1cdbd2cSJim Jagielski 
500*b1cdbd2cSJim Jagielski         std::vector<ByteString> GetLanguages();
501*b1cdbd2cSJim Jagielski 
502*b1cdbd2cSJim Jagielski         PFormEntrys *GetPFormEntrys( ResData *pResData );
503*b1cdbd2cSJim Jagielski         PFormEntrys *GetPFormEntrysCaseSensitive( ResData *pResData );
504*b1cdbd2cSJim Jagielski 
505*b1cdbd2cSJim Jagielski         static ByteString CreateKey( const ByteString& rTYP , const ByteString& rGID , const ByteString& rLID , const ByteString& rFilename , bool bCaseSensitive = false );
506*b1cdbd2cSJim Jagielski };
507*b1cdbd2cSJim Jagielski 
508*b1cdbd2cSJim Jagielski 
509*b1cdbd2cSJim Jagielski class QueueEntry
510*b1cdbd2cSJim Jagielski {
511*b1cdbd2cSJim Jagielski public:
QueueEntry(int nTypVal,ByteString sLineVal)512*b1cdbd2cSJim Jagielski     QueueEntry( int nTypVal , ByteString sLineVal ): nTyp( nTypVal ) , sLine( sLineVal ){};
513*b1cdbd2cSJim Jagielski     int nTyp;
514*b1cdbd2cSJim Jagielski     ByteString sLine;
515*b1cdbd2cSJim Jagielski };
516*b1cdbd2cSJim Jagielski 
517*b1cdbd2cSJim Jagielski class ParserQueue
518*b1cdbd2cSJim Jagielski {
519*b1cdbd2cSJim Jagielski public:
520*b1cdbd2cSJim Jagielski 
521*b1cdbd2cSJim Jagielski     ParserQueue( Export& aExportObj );
522*b1cdbd2cSJim Jagielski     ~ParserQueue();
523*b1cdbd2cSJim Jagielski 
524*b1cdbd2cSJim Jagielski     inline void Push( const QueueEntry& aEntry );
525*b1cdbd2cSJim Jagielski     bool bCurrentIsM;  // public ?
526*b1cdbd2cSJim Jagielski     bool bNextIsM;   // public ?
527*b1cdbd2cSJim Jagielski     bool bLastWasM;   // public ?
528*b1cdbd2cSJim Jagielski     bool bMflag;   // public ?
529*b1cdbd2cSJim Jagielski 
530*b1cdbd2cSJim Jagielski     void Close();
531*b1cdbd2cSJim Jagielski private:
532*b1cdbd2cSJim Jagielski     // Future / Next
533*b1cdbd2cSJim Jagielski     std::queue<QueueEntry>* aQueueNext;
534*b1cdbd2cSJim Jagielski     // Current
535*b1cdbd2cSJim Jagielski     std::queue<QueueEntry>* aQueueCur;
536*b1cdbd2cSJim Jagielski     // Ref
537*b1cdbd2cSJim Jagielski     std::queue<QueueEntry>* aQref;
538*b1cdbd2cSJim Jagielski 
539*b1cdbd2cSJim Jagielski     Export& aExport;
540*b1cdbd2cSJim Jagielski     bool bStart;
541*b1cdbd2cSJim Jagielski     bool bStartNext;
542*b1cdbd2cSJim Jagielski 
543*b1cdbd2cSJim Jagielski     inline void Pop( std::queue<QueueEntry>& aQueue );
544*b1cdbd2cSJim Jagielski 
545*b1cdbd2cSJim Jagielski };
546*b1cdbd2cSJim Jagielski #endif
547*b1cdbd2cSJim Jagielski 
548