Kaydet (Commit) a5867ea0 authored tarafından Zolnai Tamás's avatar Zolnai Tamás Kaydeden (comit) Zolnai Tamás

Transex3: Simplify members for lists

No need for hashmaps (ExportListEntry) because only one
list is stored (en-US). One list member is enough instead of
one for all types.

Change-Id: I952d6616e436c5aa7656854f83d442434ffcbd54
üst d1c74734
...@@ -54,36 +54,6 @@ typedef boost::unordered_map<OString, bool, OStringHash> ...@@ -54,36 +54,6 @@ typedef boost::unordered_map<OString, bool, OStringHash>
#define SOURCE_LANGUAGE "en-US" #define SOURCE_LANGUAGE "en-US"
#define X_COMMENT "x-comment" #define X_COMMENT "x-comment"
#define LIST_REFID "LIST_REFID"
//
// class ExportList
//
typedef OStringHashMap ExportListEntry;
/// Container for parse different types of string lists
class ExportList
{
private:
std::vector< ExportListEntry* > maList;
std::size_t nSourceLanguageListEntryCount;
public:
ExportList() { nSourceLanguageListEntryCount = 0; }
std::size_t GetSourceLanguageListEntryCount() { return nSourceLanguageListEntryCount; }
void NewSourceLanguageListEntry() { nSourceLanguageListEntryCount++; }
size_t size() const { return maList.size(); }
void push_back( ExportListEntry* item ) { maList.push_back( item ); }
ExportListEntry* operator [] ( size_t i )
{
return ( i < maList.size() ) ? maList[ i ] : NULL;
}
};
#define REFID_NONE 0xFFFF
// //
// class ResData // class ResData
...@@ -93,6 +63,7 @@ public: ...@@ -93,6 +63,7 @@ public:
#define ID_LEVEL_TEXT 0x0002 #define ID_LEVEL_TEXT 0x0002
#define ID_LEVEL_IDENTIFIER 0x0005 #define ID_LEVEL_IDENTIFIER 0x0005
typedef std::vector< OString > ExportList;
/// Purpose: holds mandatory data to export a single res (used with ResStack) /// Purpose: holds mandatory data to export a single res (used with ResStack)
class ResData class ResData
...@@ -100,7 +71,6 @@ class ResData ...@@ -100,7 +71,6 @@ class ResData
public: public:
ResData( const OString &rGId ); ResData( const OString &rGId );
ResData( const OString &rGId , const OString &rFilename ); ResData( const OString &rGId , const OString &rFilename );
~ResData();
sal_Bool SetId(const OString &rId, sal_uInt16 nLevel); sal_Bool SetId(const OString &rId, sal_uInt16 nLevel);
sal_uInt16 nIdLevel; sal_uInt16 nIdLevel;
...@@ -110,7 +80,6 @@ public: ...@@ -110,7 +80,6 @@ public:
sal_Bool bText; sal_Bool bText;
sal_Bool bQuickHelpText; sal_Bool bQuickHelpText;
sal_Bool bTitle; sal_Bool bTitle;
sal_Bool bList;
OString sResTyp; OString sResTyp;
OString sId; OString sId;
...@@ -125,10 +94,7 @@ public: ...@@ -125,10 +94,7 @@ public:
OString sTextTyp; OString sTextTyp;
ExportList *pStringList; ExportList m_aList;
ExportList *pItemList;
ExportList *pFilterList;
ExportList *pPairedList;
}; };
...@@ -168,7 +134,6 @@ private: ...@@ -168,7 +134,6 @@ private:
sal_Bool bNextMustBeDefineEOL; ///< define but no \ at lineend sal_Bool bNextMustBeDefineEOL; ///< define but no \ at lineend
std::size_t nLevel; // res. recursiv? how deep? std::size_t nLevel; // res. recursiv? how deep?
sal_uInt16 nList; ///< cur. res. is List sal_uInt16 nList; ///< cur. res. is List
OString m_sListLang;
std::size_t nListIndex; std::size_t nListIndex;
std::size_t nListLevel; std::size_t nListLevel;
sal_Bool bMergeMode; sal_Bool bMergeMode;
...@@ -181,8 +146,7 @@ private: ...@@ -181,8 +146,7 @@ private:
std::vector<OString> aLanguages; std::vector<OString> aLanguages;
sal_Bool WriteData( ResData *pResData, sal_Bool bCreateNew = sal_False ); ///< called befor dest. cur ResData sal_Bool WriteData( ResData *pResData, sal_Bool bCreateNew = sal_False ); ///< called befor dest. cur ResData
sal_Bool WriteExportList( ResData *pResData, ExportList *pExportList, sal_Bool WriteExportList( ResData *pResData, ExportList& rExportList, const sal_uInt16 nTyp );
const OString &rTyp, sal_Bool bCreateNew = sal_False );
OString MergePairedList( OString const & sLine , OString const & sText ); OString MergePairedList( OString const & sLine , OString const & sText );
...@@ -192,7 +156,7 @@ private: ...@@ -192,7 +156,7 @@ private:
OString GetPairedListString(const OString& rText); OString GetPairedListString(const OString& rText);
OString StripList(const OString& rText); OString StripList(const OString& rText);
void InsertListEntry(const OString &rText, const OString &rLine); void InsertListEntry(const OString &rLine);
void CleanValue( OString &rValue ); void CleanValue( OString &rValue );
OString GetText(const OString &rSource, int nToken); OString GetText(const OString &rSource, int nToken);
...@@ -200,10 +164,10 @@ private: ...@@ -200,10 +164,10 @@ private:
Get all MergeEntrys for the ExportList identified by pResData Get all MergeEntrys for the ExportList identified by pResData
Check whether list can merge and load all needed MergeEntry from DataBase. Check whether list can merge and load all needed MergeEntry from DataBase.
*/ */
bool GetAllMergeEntrysOfList(ResData *pResData, std::vector<MergeEntrys*>& o_vMergeEntrys, ExportList*& o_pList); bool GetAllMergeEntrysOfList(ResData *pResData, std::vector<MergeEntrys*>& o_vMergeEntrys);
void ResData2Output( MergeEntrys *pEntry, sal_uInt16 nType, const OString& rTextType ); void ResData2Output( MergeEntrys *pEntry, sal_uInt16 nType, const OString& rTextType );
void MergeRest( ResData *pResData, sal_uInt16 nMode = MERGE_MODE_NORMAL ); void MergeRest( ResData *pResData );
void ConvertMergeContent( OString &rText ); void ConvertMergeContent( OString &rText );
void ConvertExportContent( OString &rText ); void ConvertExportContent( OString &rText );
......
...@@ -46,6 +46,28 @@ boost::scoped_ptr< Export > exporter; ...@@ -46,6 +46,28 @@ boost::scoped_ptr< Export > exporter;
} }
static OString lcl_GetListTyp( const sal_uInt16 nTyp, const bool bUpperCamelCase )
{
OString sType;
switch (nTyp)
{
case LIST_STRING:
sType = bUpperCamelCase ? "StringList" : "stringlist";
break;
case LIST_FILTER:
sType = bUpperCamelCase ? "FilterList" : "filterlist";
break;
case LIST_ITEM:
sType = bUpperCamelCase ? "ItemList" : "itemlist";
break;
case LIST_PAIRED:
sType = bUpperCamelCase ? "PairedList" : "pairedlist";
break;
default: break;
}
return sType;
}
} }
extern "C" { extern "C" {
...@@ -225,7 +247,6 @@ void Export::Init() ...@@ -225,7 +247,6 @@ void Export::Init()
bNextMustBeDefineEOL = sal_False; bNextMustBeDefineEOL = sal_False;
nLevel = 0; nLevel = 0;
nList = LIST_NON; nList = LIST_NON;
m_sListLang = OString();
nListIndex = 0; nListIndex = 0;
for ( size_t i = 0, n = aResStack.size(); i < n; ++i ) for ( size_t i = 0, n = aResStack.size(); i < n; ++i )
delete aResStack[ i ]; delete aResStack[ i ];
...@@ -263,7 +284,6 @@ int Export::Execute( int nToken, const char * pToken ) ...@@ -263,7 +284,6 @@ int Export::Execute( int nToken, const char * pToken )
OString sToken( pToken ); OString sToken( pToken );
OString sOrig( sToken ); OString sOrig( sToken );
sal_Bool bWriteToMerged = bMergeMode;
if ( nToken == CONDITION ) if ( nToken == CONDITION )
{ {
...@@ -348,6 +368,8 @@ int Export::Execute( int nToken, const char * pToken ) ...@@ -348,6 +368,8 @@ int Export::Execute( int nToken, const char * pToken )
if ( nOpen < nClose ) if ( nOpen < nClose )
bExecuteDown = sal_True; bExecuteDown = sal_True;
} }
sal_Bool bWriteToMerged = bMergeMode;
switch ( nToken ) { switch ( nToken ) {
case NORMDEFINE: case NORMDEFINE:
...@@ -421,9 +443,10 @@ int Export::Execute( int nToken, const char * pToken ) ...@@ -421,9 +443,10 @@ int Export::Execute( int nToken, const char * pToken )
case LEVELUP: { case LEVELUP: {
// push // push
if ( nList ) if ( nList )
{
nListLevel++; nListLevel++;
if ( nList )
break; break;
}
OString sLowerTyp; OString sLowerTyp;
if ( pResData ) if ( pResData )
...@@ -440,7 +463,7 @@ int Export::Execute( int nToken, const char * pToken ) ...@@ -440,7 +463,7 @@ int Export::Execute( int nToken, const char * pToken )
break; break;
case LEVELDOWN: { case LEVELDOWN: {
// pop // pop
if ( !nList ) { if ( !nList || !nListLevel ) {
if ( nLevel ) { if ( nLevel ) {
if ( bDefine && (nLevel == 1 )) { if ( bDefine && (nLevel == 1 )) {
bDefine = sal_False; bDefine = sal_False;
...@@ -453,15 +476,17 @@ int Export::Execute( int nToken, const char * pToken ) ...@@ -453,15 +476,17 @@ int Export::Execute( int nToken, const char * pToken )
aResStack.erase( it ); aResStack.erase( it );
nLevel--; nLevel--;
} }
if( nList )
{
nList = LIST_NON;
nListLevel = 1;
}
} }
else { else
{
if ( bDefine ) if ( bDefine )
bNextMustBeDefineEOL = sal_True; bNextMustBeDefineEOL = sal_True;
if ( !nListLevel ) { nListLevel--;
nList = LIST_NON;
}
else
nListLevel--;
} }
} }
break; break;
...@@ -484,19 +509,15 @@ int Export::Execute( int nToken, const char * pToken ) ...@@ -484,19 +509,15 @@ int Export::Execute( int nToken, const char * pToken )
} }
else if (sKey =="STRINGLIST") else if (sKey =="STRINGLIST")
{ {
pResData->bList = sal_True;
nList = LIST_STRING; nList = LIST_STRING;
m_sListLang = SOURCE_LANGUAGE;
nListIndex = 0; nListIndex = 0;
nListLevel = 0; nListLevel = 1;
} }
else if (sKey == "FILTERLIST") else if (sKey == "FILTERLIST")
{ {
pResData->bList = sal_True;
nList = LIST_FILTER; nList = LIST_FILTER;
m_sListLang = SOURCE_LANGUAGE;
nListIndex = 0; nListIndex = 0;
nListLevel = 0; nListLevel = 1;
} }
if (sToken.indexOf( '{' ) != -1 if (sToken.indexOf( '{' ) != -1
&& (lcl_countOccurrences(sToken, '{') && (lcl_countOccurrences(sToken, '{')
...@@ -520,35 +541,24 @@ int Export::Execute( int nToken, const char * pToken ) ...@@ -520,35 +541,24 @@ int Export::Execute( int nToken, const char * pToken )
sKey = sKey.toAsciiUpperCase(); sKey = sKey.toAsciiUpperCase();
if (sKey == "STRINGLIST") if (sKey == "STRINGLIST")
{ {
pResData->bList = sal_True;
nList = LIST_STRING; nList = LIST_STRING;
m_sListLang = SOURCE_LANGUAGE;
nListIndex = 0;
nListLevel = 0;
} }
else if (sKey == "FILTERLIST") else if (sKey == "FILTERLIST")
{ {
pResData->bList = sal_True;
nList = LIST_FILTER; nList = LIST_FILTER;
m_sListLang = SOURCE_LANGUAGE;
nListIndex = 0;
nListLevel = 0;
} }
else if (sKey == "PAIREDLIST") else if (sKey == "PAIREDLIST")
{ {
pResData->bList = sal_True;
nList = LIST_PAIRED; nList = LIST_PAIRED;
m_sListLang = SOURCE_LANGUAGE;
nListIndex = 0;
nListLevel = 0;
} }
else if (sKey == "ITEMLIST") else if (sKey == "ITEMLIST")
{ {
pResData->bList = sal_True;
nList = LIST_ITEM; nList = LIST_ITEM;
m_sListLang = SOURCE_LANGUAGE; }
if( nList )
{
nListIndex = 0; nListIndex = 0;
nListLevel = 0; nListLevel = 1;
} }
} }
} }
...@@ -556,16 +566,11 @@ int Export::Execute( int nToken, const char * pToken ) ...@@ -556,16 +566,11 @@ int Export::Execute( int nToken, const char * pToken )
case TEXT: case TEXT:
case _LISTTEXT: case _LISTTEXT:
case LISTTEXT: { case LISTTEXT: {
// this is an entry for a String- or FilterList // this is an entry for a List
if ( nList ) { if ( nList )
{
SetChildWithText(); SetChildWithText();
sal_Int32 n = 0; InsertListEntry( sOrig );
OString sEntry(sToken.getToken(1, '"', n));
if ( lcl_countOccurrences(sToken, '"') > 2 )
sEntry += "\"";
if ( sEntry == "\\\"" )
sEntry = "\"";
InsertListEntry( sEntry, sOrig );
} }
} }
break; break;
...@@ -743,29 +748,12 @@ sal_Bool Export::WriteData( ResData *pResData, sal_Bool bCreateNew ) ...@@ -743,29 +748,12 @@ sal_Bool Export::WriteData( ResData *pResData, sal_Bool bCreateNew )
pResData->sTitle[ SOURCE_LANGUAGE ] = ""; pResData->sTitle[ SOURCE_LANGUAGE ] = "";
} }
} }
if ( pResData->pStringList ) {
OString sList( "stringlist" ); if( nList )
WriteExportList( pResData, pResData->pStringList, sList, bCreateNew ); {
if ( bCreateNew ) WriteExportList( pResData, pResData->m_aList, nList );
pResData->pStringList = 0;
}
if ( pResData->pFilterList ) {
OString sList( "filterlist" );
WriteExportList( pResData, pResData->pFilterList, sList, bCreateNew );
if ( bCreateNew )
pResData->pFilterList = 0;
}
if ( pResData->pItemList ) {
OString sList( "itemlist" );
WriteExportList( pResData, pResData->pItemList, sList, bCreateNew );
if ( bCreateNew )
pResData->pItemList = 0;
}
if ( pResData->pPairedList ) {
OString sList( "pairedlist" );
WriteExportList( pResData, pResData->pPairedList, sList, bCreateNew );
if ( bCreateNew ) if ( bCreateNew )
pResData->pPairedList = 0; pResData->m_aList.clear();
} }
return sal_True; return sal_True;
} }
...@@ -792,8 +780,8 @@ OString Export::StripList(const OString & rText) ...@@ -792,8 +780,8 @@ OString Export::StripList(const OString & rText)
return s1.copy( 0 , s1.lastIndexOf('\"')); return s1.copy( 0 , s1.lastIndexOf('\"'));
} }
sal_Bool Export::WriteExportList(ResData *pResData, ExportList *pExportList, sal_Bool Export::WriteExportList(ResData *pResData, ExportList& rExportList,
const OString &rTyp, sal_Bool bCreateNew) const sal_uInt16 nTyp)
{ {
OString sGID(pResData->sGId); OString sGID(pResData->sGId);
if (sGID.isEmpty()) if (sGID.isEmpty())
...@@ -806,15 +794,13 @@ sal_Bool Export::WriteExportList(ResData *pResData, ExportList *pExportList, ...@@ -806,15 +794,13 @@ sal_Bool Export::WriteExportList(ResData *pResData, ExportList *pExportList,
} }
} }
for ( size_t i = 0; pExportList != NULL && i < pExportList->size(); i++ ) for ( size_t i = 0; i < rExportList.size(); i++ )
{ {
ExportListEntry *pEntry = (*pExportList)[ i ];
OString sLID; OString sLID;
OString sText((*pEntry)[ SOURCE_LANGUAGE ] ); OString sText(rExportList[ i ]);
// Strip PairList Line String // Strip PairList Line String
if (rTyp.equalsIgnoreAsciiCase("pairedlist")) if (nTyp == LIST_PAIRED)
{ {
sLID = GetPairedListID( sText ); sLID = GetPairedListID( sText );
sText = GetPairedListString( sText ); sText = GetPairedListString( sText );
...@@ -827,15 +813,13 @@ sal_Bool Export::WriteExportList(ResData *pResData, ExportList *pExportList, ...@@ -827,15 +813,13 @@ sal_Bool Export::WriteExportList(ResData *pResData, ExportList *pExportList,
sText = "\""; sText = "\"";
} }
ConvertExportContent(sText); ConvertExportContent(sText);
OString sType = lcl_GetListTyp( nList, false );
common::writePoEntry( common::writePoEntry(
"Transex3", *aOutput.mPo, global::inputPathname, "Transex3", *aOutput.mPo, global::inputPathname,
rTyp, sGID, sLID, OString(), sText); sType, sGID, sLID, OString(), sText);
if ( bCreateNew )
delete [] pEntry;
} }
if ( bCreateNew )
delete pExportList;
return sal_True; return sal_True;
} }
...@@ -863,67 +847,14 @@ OString Export::FullId() ...@@ -863,67 +847,14 @@ OString Export::FullId()
return sFull.makeStringAndClear(); return sFull.makeStringAndClear();
} }
void Export::InsertListEntry(const OString &rText, const OString &rLine) void Export::InsertListEntry(const OString &rLine)
{ {
ResData *pResData = ( nLevel-1 < aResStack.size() ) ? aResStack[ nLevel-1 ] : NULL; ResData *pResData = ( nLevel-1 < aResStack.size() ) ? aResStack[ nLevel-1 ] : NULL;
ExportList *pList = NULL; if( pResData->m_aList.empty() )
if ( nList == LIST_STRING ) { nListIndex = 0;
pList = pResData->pStringList;
if ( !pList ) {
pResData->pStringList = new ExportList();
pList = pResData->pStringList;
nListIndex = 0;
}
}
else if ( nList == LIST_FILTER ) {
pList = pResData->pFilterList;
if ( !pList ) {
pResData->pFilterList = new ExportList();
pList = pResData->pFilterList;
nListIndex = 0;
}
}
else if ( nList == LIST_ITEM ) {
pList = pResData->pItemList;
if ( !pList ) {
pResData->pItemList = new ExportList();
pList = pResData->pItemList;
nListIndex = 0;
}
}
else if ( nList == LIST_PAIRED ) {
pList = pResData->pPairedList;
if ( !pList ) {
pResData->pPairedList = new ExportList();
pList = pResData->pPairedList;
nListIndex = 0;
}
}
else
return;
if ( nListIndex + 1 > pList->size())
{
ExportListEntry *pNew = new ExportListEntry();
(*pNew)[LIST_REFID] = OString::number(REFID_NONE);
pList->push_back(pNew);
}
ExportListEntry *pCurEntry = (*pList)[ nListIndex ];
// For paired list use the line to set proper lid
if( nList == LIST_PAIRED ){
(*pCurEntry)[ m_sListLang ] = rLine;
}else
(*pCurEntry)[ m_sListLang ] = rText;
if ( m_sListLang.equalsIgnoreAsciiCase("en-US") ) { pResData->m_aList.push_back(rLine);
(*pCurEntry)[ SOURCE_LANGUAGE ] = rLine;
pList->NewSourceLanguageListEntry();
}
nListIndex++;
} }
void Export::CleanValue( OString &rValue ) void Export::CleanValue( OString &rValue )
...@@ -1074,62 +1005,24 @@ void Export::ConvertExportContent( OString& rText ) ...@@ -1074,62 +1005,24 @@ void Export::ConvertExportContent( OString& rText )
rText = helper::unEscapeAll(rText,"\\n""\\t""\\\\""\\\"","\n""\t""\\""\""); rText = helper::unEscapeAll(rText,"\\n""\\t""\\\\""\\\"","\n""\t""\\""\"");
} }
bool Export::GetAllMergeEntrysOfList(ResData *pResData, std::vector<MergeEntrys*>& o_vMergeEntrys, ExportList*& o_pList ) bool Export::GetAllMergeEntrysOfList(ResData *pResData, std::vector<MergeEntrys*>& o_vMergeEntrys )
{ {
o_vMergeEntrys.clear(); o_vMergeEntrys.clear();
o_pList = 0;
if (!pResData->sGId.isEmpty()) if (!pResData->sGId.isEmpty())
pResData->sGId = pResData->sGId + OString('.'); pResData->sGId = pResData->sGId + OString('.');
pResData->sGId = pResData->sGId + pResData->sId; pResData->sGId = pResData->sGId + pResData->sId;
// Find out the type of List pResData->sResTyp = lcl_GetListTyp( nList, false );
MergeEntrys* pEntrysOfFirstItem = 0;
sal_uInt16 nType = LIST_STRING;
bool bPairedList = false;
while( !pEntrysOfFirstItem && nType <= LIST_PAIRED )
{
switch ( nType )
{
case LIST_STRING : pResData->sResTyp = "stringlist"; o_pList = pResData->pStringList; bPairedList = false; break;
case LIST_FILTER : pResData->sResTyp = "filterlist"; o_pList = pResData->pFilterList; bPairedList = false; break;
case LIST_ITEM : pResData->sResTyp = "itemlist"; o_pList = pResData->pItemList; bPairedList = false; break;
case LIST_PAIRED : pResData->sResTyp = "pairedlist"; o_pList = pResData->pPairedList; bPairedList = true; break;
}
// Set matching pairedlist identifier const sal_uInt16 nMaxIndex = pResData->m_aList.size();
if( bPairedList && pResData->pPairedList )
{
ExportListEntry* pListE = ( ExportListEntry* ) (*pResData->pPairedList)[ 0 ];
pResData->sId = GetPairedListID ( (*pListE)[ SOURCE_LANGUAGE ] );
}
else
pResData->sId = "1";
pEntrysOfFirstItem = pMergeDataFile->GetMergeEntrys( pResData );
++nType;
}
if( !pEntrysOfFirstItem )
{
o_pList = 0;
return false;
}
else
nList = nType-1;
sal_uInt16 nMaxIndex = 0;
if ( o_pList )
{
nMaxIndex = o_pList->GetSourceLanguageListEntryCount();
}
/** /**
* Check whether count of listentries match with count * Check whether count of listentries match with count
* of translated items. If not than write origin items * of translated items. If not than write origin items
* to the list to avoid mixed translations * to the list to avoid mixed translations
* (exclude pairedlist) * (exclude pairedlist)
*/ */
if( !bPairedList ) if( nList != LIST_PAIRED )
{ {
MergeEntrys* pEntrys; MergeEntrys* pEntrys;
// MergeData contains longer list // MergeData contains longer list
...@@ -1145,18 +1038,12 @@ bool Export::GetAllMergeEntrysOfList(ResData *pResData, std::vector<MergeEntrys* ...@@ -1145,18 +1038,12 @@ bool Export::GetAllMergeEntrysOfList(ResData *pResData, std::vector<MergeEntrys*
pResData->sId = "1"; pResData->sId = "1";
} }
o_vMergeEntrys.push_back(pEntrysOfFirstItem); for( sal_uInt16 nLIndex = 1; nLIndex <= nMaxIndex; ++nLIndex )
for( sal_uInt16 nLIndex = 2; nLIndex <= nMaxIndex; ++nLIndex )
{ {
// Set matching pairedlist identifier // Set matching pairedlist identifier
if ( bPairedList ) if ( nList == LIST_PAIRED )
{ {
ExportListEntry* pListE = ( ExportListEntry* )(*pResData->pPairedList)[ ( nLIndex ) -1 ]; pResData->sId = GetPairedListID ( pResData->m_aList[ ( nLIndex ) -1 ] );
if( pListE )
{
pResData->sId = GetPairedListID ( (*pListE)[ SOURCE_LANGUAGE ] );
}
} }
else else
pResData->sId = OString::number(nLIndex); pResData->sId = OString::number(nLIndex);
...@@ -1214,159 +1101,126 @@ void Export::ResData2Output( MergeEntrys *pEntry, sal_uInt16 nType, const OStrin ...@@ -1214,159 +1101,126 @@ void Export::ResData2Output( MergeEntrys *pEntry, sal_uInt16 nType, const OStrin
} }
} }
void Export::MergeRest( ResData *pResData, sal_uInt16 nMode ) void Export::MergeRest( ResData *pResData )
{ {
if ( !pMergeDataFile ){ if ( !pMergeDataFile ){
pMergeDataFile = new MergeDataFile( sMergeSrc, global::inputPathname, false ); pMergeDataFile = new MergeDataFile( sMergeSrc, global::inputPathname, false );
aLanguages = pMergeDataFile->GetLanguages(); aLanguages = pMergeDataFile->GetLanguages();
} }
switch ( nMode ) {
case MERGE_MODE_NORMAL : {
MergeEntrys *pEntry = 0;
if( pResData->bText || pResData->bQuickHelpText || pResData->bTitle )
pEntry = pMergeDataFile->GetMergeEntrys( pResData );
if ( pEntry ) { MergeEntrys *pEntry = 0;
if ( pResData->bText ) if( pResData->bText || pResData->bQuickHelpText || pResData->bTitle )
ResData2Output( pEntry, STRING_TYP_TEXT, pResData->sTextTyp ); pEntry = pMergeDataFile->GetMergeEntrys( pResData );
if ( pResData->bQuickHelpText ) if ( pEntry )
ResData2Output( pEntry, STRING_TYP_QUICKHELPTEXT, OString("QuickHelpText") ); {
if ( pResData->bText )
ResData2Output( pEntry, STRING_TYP_TEXT, pResData->sTextTyp );
if ( pResData->bTitle ) if ( pResData->bQuickHelpText )
ResData2Output( pEntry, STRING_TYP_TITLE, OString("Title") ); ResData2Output( pEntry, STRING_TYP_QUICKHELPTEXT, OString("QuickHelpText") );
}
// Merge Lists if ( pResData->bTitle )
if ( pResData->bList ) { ResData2Output( pEntry, STRING_TYP_TITLE, OString("Title") );
OString sOldId = pResData->sId; }
OString sOldGId = pResData->sGId;
OString sOldTyp = pResData->sResTyp;
sal_uInt16 nOldListTyp = nList;
OString sSpace; // Merge Lists
for ( sal_uInt16 i = 1; i < nLevel-1; i++ ) if ( nList )
sSpace += "\t"; {
OString sOldId = pResData->sId;
OString sOldGId = pResData->sGId;
OString sOldTyp = pResData->sResTyp;
std::vector<MergeEntrys*> vMergeEntryVector; OString sSpace;
ExportList* pList = 0; for ( sal_uInt16 i = 1; i < nLevel-1; i++ )
bool bTranslateList = GetAllMergeEntrysOfList(pResData, vMergeEntryVector, pList); sSpace += "\t";
std::vector<MergeEntrys*> vMergeEntryVector;
bool bTranslateList = GetAllMergeEntrysOfList(pResData, vMergeEntryVector);
OString sCur;
for( unsigned int n = 0; n < aLanguages.size(); n++ )
{
sCur = aLanguages[ n ];
if( pList ) sal_uInt16 nLIndex = 0;
sal_uInt16 nMaxIndex = pResData->m_aList.size();
while( nLIndex < nMaxIndex )
{
if ( nLIndex == 0 )
{ {
OString sCur; OStringBuffer sHead;
for( unsigned int n = 0; n < aLanguages.size(); n++ ) if ( bNextMustBeDefineEOL )
{ sHead.append("\\\n\t");
sCur = aLanguages[ n ]; sHead.append(sSpace + lcl_GetListTyp( nList, true ) + " [ " + sCur + " ] ");
sal_uInt16 nLIndex = 0; if ( bDefine || bNextMustBeDefineEOL )
sal_uInt16 nMaxIndex = pList->GetSourceLanguageListEntryCount(); {
while( nLIndex < nMaxIndex ) sHead.append("= \\\n" + sSpace + "\t{\\\n\t");
{ }
if ( nLIndex == 0 ) else
{ {
OStringBuffer sHead; sHead.append("= \n" + sSpace + "\t{\n\t");
if ( bNextMustBeDefineEOL ) }
sHead.append("\\\n\t"); WriteToMerged(sHead.makeStringAndClear() , true);
sHead.append(sSpace); }
switch ( nList )
{
case LIST_STRING:
sHead.append("StringList ");
break;
case LIST_FILTER:
sHead.append("FilterList ");
break;
case LIST_ITEM:
sHead.append("ItemList ");
break;
case LIST_PAIRED:
sHead.append("PairedList ");
break;
}
sHead.append("[ ");
sHead.append(sCur);
sHead.append(" ] ");
if ( bDefine || bNextMustBeDefineEOL )
{
sHead.append("= \\\n");
sHead.append(sSpace);
sHead.append("\t{\\\n\t");
}
else
{
sHead.append("= \n");
sHead.append(sSpace);
sHead.append("\t{\n\t");
}
WriteToMerged(sHead.makeStringAndClear() , true);
}
OString sLine;
if ( pList && (*pList)[ nLIndex ] )
sLine = ( *(*pList)[ nLIndex ])[ SOURCE_LANGUAGE ];
if ( sLine.indexOf( '>' ) != -1 ) {
if ((( sLine.indexOf( '{' ) == -1 ) ||
( sLine.indexOf( '{' ) >= sLine.indexOf( '"' ))) &&
(( sLine.indexOf( '<' ) == -1 ) ||
( sLine.indexOf( '<' ) >= sLine.indexOf( '"' ))))
{
sLine = sLine.replaceFirst("\"", "< \"" );
}
}
if( bTranslateList && nLIndex < vMergeEntryVector.size() && vMergeEntryVector[nLIndex] ) OString sLine = pResData->m_aList[ nLIndex ];
{ if ( sLine.indexOf( '>' ) != -1 )
OString sText; {
sal_Bool bText; if ((( sLine.indexOf( '{' ) == -1 ) ||
bText = vMergeEntryVector[nLIndex]->GetText( sText, STRING_TYP_TEXT, sCur, sal_True ); ( sLine.indexOf( '{' ) >= sLine.indexOf( '"' ))) &&
if ( bText && !sText.isEmpty() ) (( sLine.indexOf( '<' ) == -1 ) ||
{ ( sLine.indexOf( '<' ) >= sLine.indexOf( '"' ))))
ConvertMergeContent( sText ); {
OString sPre = sLine.copy( 0 , sLine.indexOf('"') ); sLine = sLine.replaceFirst("\"", "< \"" );
OString sPost = sLine.copy( sLine.lastIndexOf('"') + 1 ); }
sLine = sPre + sText + sPost; }
}
}
OString sText1( "\t" ); if( bTranslateList && nLIndex < vMergeEntryVector.size() && vMergeEntryVector[nLIndex] )
sText1 += sLine; {
if ( bDefine || bNextMustBeDefineEOL ) OString sText;
sText1 += " ;\\\n"; bool bText = vMergeEntryVector[nLIndex]->GetText( sText, STRING_TYP_TEXT, sCur, sal_True );
else if ( bText && !sText.isEmpty() )
sText1 += " ;\n"; {
sText1 += sSpace; ConvertMergeContent( sText );
sText1 += "\t"; OString sPre = sLine.copy( 0 , sLine.indexOf('"') );
WriteToMerged( sText1 ,true ); OString sPost = sLine.copy( sLine.lastIndexOf('"') + 1 );
++nLIndex; sLine = sPre + sText + sPost;
}
if ( nLIndex > 0 ) {
OString sFooter;
if (!sSpace.isEmpty()) {
sFooter = sSpace.copy(1);
}
if ( bNextMustBeDefineEOL )
sFooter += "};";
else if ( !bDefine )
sFooter += "};\n\t";
else
sFooter += "\n\n";
WriteToMerged( sFooter ,true );
}
} }
} }
pResData->sId = sOldId; OString sText1( "\t" );
pResData->sGId = sOldGId; sText1 += sLine;
pResData->sResTyp = sOldTyp; if ( bDefine || bNextMustBeDefineEOL )
nList = nOldListTyp; sText1 += " ;\\\n";
else
sText1 += " ;\n";
sText1 += sSpace;
sText1 += "\t";
WriteToMerged( sText1 ,true );
++nLIndex;
}
if ( nLIndex > 0 )
{
OString sFooter;
if (!sSpace.isEmpty())
sFooter = sSpace.copy(1);
if ( bNextMustBeDefineEOL )
sFooter += "};";
else if ( !bDefine )
sFooter += "};\n\t";
else
sFooter += "\n\n";
WriteToMerged( sFooter ,true );
} }
} }
break; pResData->sId = sOldId;
case MERGE_MODE_LIST : { pResData->sGId = sOldGId;
} pResData->sResTyp = sOldTyp;
break;
} }
pParseQueue->bMflag = false; pParseQueue->bMflag = false;
} }
......
...@@ -71,13 +71,8 @@ ResData::ResData( const OString &rGId ) ...@@ -71,13 +71,8 @@ ResData::ResData( const OString &rGId )
bText( sal_False ), bText( sal_False ),
bQuickHelpText( sal_False ), bQuickHelpText( sal_False ),
bTitle( sal_False ), bTitle( sal_False ),
bList( sal_False ),
sGId( rGId ), sGId( rGId ),
sTextTyp( "Text" ), sTextTyp( "Text" )
pStringList( NULL ),
pItemList( NULL ),
pFilterList( NULL ),
pPairedList( NULL )
{ {
sGId = sGId.replaceAll("\r", OString()); sGId = sGId.replaceAll("\r", OString());
} }
...@@ -90,47 +85,13 @@ ResData::ResData( const OString &rGId, const OString &rFilename) ...@@ -90,47 +85,13 @@ ResData::ResData( const OString &rGId, const OString &rFilename)
bText( sal_False ), bText( sal_False ),
bQuickHelpText( sal_False ), bQuickHelpText( sal_False ),
bTitle( sal_False ), bTitle( sal_False ),
bList( sal_False ),
sGId( rGId ), sGId( rGId ),
sFilename( rFilename ), sFilename( rFilename ),
sTextTyp( "Text" ), sTextTyp( "Text" )
pStringList( NULL ),
pItemList( NULL ),
pFilterList( NULL ),
pPairedList( NULL )
{ {
sGId = sGId.replaceAll("\r", OString()); sGId = sGId.replaceAll("\r", OString());
} }
ResData::~ResData()
{
if ( pStringList ) {
// delete existing res. of type StringList
for ( size_t i = 0; i < pStringList->size(); i++ ) {
ExportListEntry* test = (*pStringList)[ i ];
if( test != NULL ) delete test;
}
delete pStringList;
}
if ( pFilterList ) {
// delete existing res. of type FilterList
for ( size_t i = 0; i < pFilterList->size(); i++ ) {
ExportListEntry* test = (*pFilterList)[ i ];
delete test;
}
delete pFilterList;
}
if ( pItemList ) {
// delete existing res. of type ItemList
for ( size_t i = 0; i < pItemList->size(); i++ ) {
ExportListEntry* test = (*pItemList)[ i ];
delete test;
}
delete pItemList;
}
}
// //
// class MergeEntrys // class MergeEntrys
// //
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment