diff options
author | Zolnai Tamás <zolnaitamas2000@gmail.com> | 2012-09-10 20:31:38 +0200 |
---|---|---|
committer | Michael Stahl <mstahl@redhat.com> | 2012-09-20 18:46:11 +0000 |
commit | 161f4ac95ae3df1daaede762862ea1c3ac4bb399 (patch) | |
tree | 10a13b0c1347a0222493cced74c42c4bd383b6ff /l10ntools/source/merge.cxx | |
parent | 42a2fb1c24750dde53b737d1fb45e2bb7286a3f2 (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.cxx | 108 |
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(); } |