summaryrefslogtreecommitdiff
path: root/l10ntools/source/merge.cxx
diff options
context:
space:
mode:
authorZolnai Tamás <zolnaitamas2000@gmail.com>2012-09-10 20:31:38 +0200
committerMichael Stahl <mstahl@redhat.com>2012-09-20 18:46:11 +0000
commit161f4ac95ae3df1daaede762862ea1c3ac4bb399 (patch)
tree10a13b0c1347a0222493cced74c42c4bd383b6ff /l10ntools/source/merge.cxx
parent42a2fb1c24750dde53b737d1fb45e2bb7286a3f2 (diff)
Use po file for merge 1. step
Make executables to waiting for po as input Add some function to po files Rewrite makefiles to use po files for merge Change KeyId generator not to use xml special charachters One filetype remain: properties Change-Id: If2bd2ae7afc61518c2d838a3cae301ef62dd9761 Reviewed-on: https://gerrit.libreoffice.org/593 Reviewed-by: Michael Stahl <mstahl@redhat.com> Tested-by: Michael Stahl <mstahl@redhat.com>
Diffstat (limited to 'l10ntools/source/merge.cxx')
-rw-r--r--l10ntools/source/merge.cxx108
1 files changed, 81 insertions, 27 deletions
diff --git a/l10ntools/source/merge.cxx b/l10ntools/source/merge.cxx
index 5da52c57d640..a1c4570056e6 100644
--- a/l10ntools/source/merge.cxx
+++ b/l10ntools/source/merge.cxx
@@ -34,6 +34,7 @@
#include <vector>
#include "export.hxx"
+#include "po.hxx"
namespace
{
@@ -142,42 +143,95 @@ MergeDataFile::MergeDataFile(
bool bCaseSensitive)
{
std::ifstream aInputStream(rFileName.getStr());
- const ::rtl::OString sHACK(RTL_CONSTASCII_STRINGPARAM("HACK"));
- const ::rtl::OString sFileNormalized(lcl_NormalizeFilename(rFile));
- const bool isFileEmpty = !sFileNormalized.isEmpty();
-
if (!aInputStream.is_open())
{
- printf("Warning : Can't open %s\n", rFileName.getStr());
+ printf("Warning : Can't open po path container file");
return;
}
- while (!aInputStream.eof())
+ std::string sPoFileName;
+ aInputStream >> sPoFileName;
+ bool bFirstLang = true;
+ while(!aInputStream.eof())
{
- std::string buf;
- std::getline(aInputStream, buf);
- rtl::OString sLine(buf.data(), buf.length());
- sal_Int32 n = 0;
- // Skip all wrong filenames
- const ::rtl::OString filename = lcl_NormalizeFilename(sLine.getToken(1, '\t', n)); // token 1
- if(isFileEmpty || sFileNormalized.equals("") || (!isFileEmpty && filename.equals(sFileNormalized)) )
+ std::ifstream aPoFile(sPoFileName.c_str());
+ const OString sHACK("HACK");
+ const OString sFileName(lcl_NormalizeFilename(rFile));
+
+ if (!aPoFile.is_open())
{
- const rtl::OString sTYP = sLine.getToken( 1, '\t', n ); // token 3
- const rtl::OString sGID = sLine.getToken( 0, '\t', n ); // token 4
- const rtl::OString sLID = sLine.getToken( 0, '\t', n ); // token 5
- rtl::OString sPFO = sLine.getToken( 1, '\t', n ); // token 7
- sPFO = sHACK;
- rtl::OString nLANG = sLine.getToken( 1, '\t', n ); // token 9
- nLANG = nLANG.trim();
- const rtl::OString sTEXT = sLine.getToken( 0, '\t', n ); // token 10
- const rtl::OString sQHTEXT = sLine.getToken( 1, '\t', n ); // token 12
- const rtl::OString sTITLE = sLine.getToken( 0, '\t', n ); // token 13
-
- if (!nLANG.equalsIgnoreAsciiCaseL(RTL_CONSTASCII_STRINGPARAM("en-US")))
+ printf("Warning : Can't open %s\n", sPoFileName.c_str());
+ return;
+ }
+
+ PoHeader aPoHeader;
+ aPoHeader.readFromFile(aPoFile);
+ const OString nLANG = aPoHeader.getLanguage();
+ aLanguageSet.insert(nLANG);
+ PoEntry aNextPo;
+ do
+ {
+ aNextPo.readFromFile(aPoFile);
+ } while( !aNextPo.isNull() && aNextPo.getSourceFile() != sFileName );
+ while( !aNextPo.isNull() && aNextPo.getSourceFile() == sFileName )
+ {
+ PoEntry aActPo(aNextPo);
+
+ bool bInSameComp = false;
+ OString sText;
+ OString sQHText;
+ OString sTitle;
+ OString sExText;
+ OString sExQHText;
+ OString sExTitle;
+ OString sQTZText;
+ OString sQTZQHText;
+ OString sQTZTitle;
+ do
+ {
+ if( bInSameComp )
+ aActPo = PoEntry(aNextPo);
+ OString sTemp = aActPo.getTransStr();
+ if( aActPo.getFuzzy() || sTemp.isEmpty() )
+ sTemp = aActPo.getUnTransStr();
+ switch( aActPo.getType() )
+ {
+ case PoEntry::TTEXT:
+ sText = sTemp;
+ sExText = aActPo.getUnTransStr();
+ sQTZText = aActPo.getKeyId();
+ break;
+ case PoEntry::TQUICKHELPTEXT:
+ sQHText = sTemp;
+ sExQHText = aActPo.getUnTransStr();
+ sQTZQHText = aActPo.getKeyId();
+ break;
+ case PoEntry::TTITLE:
+ sTitle = sTemp;
+ sExTitle = aActPo.getUnTransStr();
+ sQTZTitle = aActPo.getKeyId();
+ break;
+ }
+ aNextPo.readFromFile(aPoFile);
+ } while(!aNextPo.isNull() &&
+ (bInSameComp = PoEntry::IsInSameComp(aActPo,aNextPo)));
+
+ InsertEntry( aActPo.getResourceType(), aActPo.getGroupId(),
+ aActPo.getLocalId(), sHACK, nLANG, sText,
+ sQHText, sTitle, sFileName, bCaseSensitive );
+ if( bFirstLang )
{
- aLanguageSet.insert(nLANG);
- InsertEntry( sTYP, sGID, sLID, sPFO, nLANG, sTEXT, sQHTEXT, sTITLE, filename, bCaseSensitive );
+ aLanguageSet.insert("qtz");
+ InsertEntry( aActPo.getResourceType(), aActPo.getGroupId(),
+ aActPo.getLocalId(), sHACK, "qtz",
+ sQTZText + "‖" + sExText,
+ sQTZQHText + "‖" + sExQHText,
+ sQTZTitle + "‖" + sExTitle,
+ sFileName, bCaseSensitive );
}
}
+ aPoFile.close();
+ aInputStream >> sPoFileName;
+ bFirstLang = false;
}
aInputStream.close();
}