blob: 6e6770c23ff06b4220d8ae5adb860d65d449a5e2 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
#ifndef _CFG_MERGE_HXX
#define _CFG_MERGE_HXX
#include <tools/string.hxx>
#include <tools/list.hxx>
#include <hash_map>
typedef std::hash_map<ByteString , ByteString , hashByteString,equalByteString>
ByteStringHashMap;
//
// class CfgStackData
//
class CfgStackData
{
friend class CfgParser;
friend class CfgExport;
friend class CfgMerge;
private:
ByteString sTagType;
ByteString sIdentifier;
ByteString sResTyp;
ByteString sTextTag;
ByteString sEndTextTag;
ByteStringHashMap sText;
public:
CfgStackData( const ByteString &rTag, const ByteString &rId )
: sTagType( rTag ), sIdentifier( rId ) {};
ByteString &GetTagType() { return sTagType; }
ByteString &GetIdentifier() { return sIdentifier; }
};
//
// class CfgStack
//
DECLARE_LIST( CfgStackList, CfgStackData * )
class CfgStack : public CfgStackList
{
public:
CfgStack() : CfgStackList( 10, 10 ) {}
~CfgStack();
sal_uLong Push( CfgStackData *pStackData );
CfgStackData *Push( const ByteString &rTag, const ByteString &rId );
CfgStackData *Pop() { return Remove( Count() - 1 ); }
CfgStackData *GetStackData( sal_uLong nPos = LIST_APPEND );
ByteString GetAccessPath( sal_uLong nPos = LIST_APPEND );
};
//
// class CfgParser
//
class CfgParser
{
protected:
ByteString sCurrentResTyp;
ByteString sCurrentIsoLang;
ByteString sCurrentText;
ByteString sLastWhitespace;
CfgStack aStack;
CfgStackData *pStackData;
sal_Bool bLocalize;
virtual void WorkOnText(
ByteString &rText,
const ByteString &nLangIndex )=0;
virtual void WorkOnRessourceEnd()=0;
virtual void Output( const ByteString& rOutput )=0;
void Error( const ByteString &rError );
private:
int ExecuteAnalyzedToken( int nToken, char *pToken );
std::vector<ByteString> aLanguages;
void AddText(
ByteString &rText,
const ByteString &rIsoLang,
const ByteString &rResTyp );
sal_Bool IsTokenClosed( const ByteString &rToken );
public:
CfgParser();
virtual ~CfgParser();
int Execute( int nToken, char * pToken );
};
//
// class CfgOutputParser
//
class CfgOutputParser : public CfgParser
{
protected:
SvFileStream *pOutputStream;
public:
CfgOutputParser ( const ByteString &rOutputFile );
virtual ~CfgOutputParser();
};
//
// class CfgExport
//
class CfgExport : public CfgOutputParser
{
private:
ByteString sPrj;
ByteString sPath;
std::vector<ByteString> aLanguages;
protected:
void WorkOnText(
ByteString &rText,
const ByteString &rIsoLang
);
void WorkOnRessourceEnd();
void Output( const ByteString& rOutput );
public:
CfgExport(
const ByteString &rOutputFile,
const ByteString &rProject,
const ByteString &rFilePath
);
~CfgExport();
};
//
// class CfgMerge
//
class CfgMerge : public CfgOutputParser
{
private:
MergeDataFile *pMergeDataFile;
std::vector<ByteString> aLanguages;
ResData *pResData;
sal_Bool bGerman;
ByteString sFilename;
sal_Bool bEnglish;
protected:
void WorkOnText(
ByteString &rText,
const ByteString &nLangIndex );
void WorkOnRessourceEnd();
void Output( const ByteString& rOutput );
public:
CfgMerge(
const ByteString &rMergeSource,
const ByteString &rOutputFile,
ByteString &rFilename
);
~CfgMerge();
};
#endif