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