Author: jani Date: Mon Mar 11 21:08:23 2013 New Revision: 1455330 URL: http://svn.apache.org/r1455330 Log: read/write of .po files works !!!
Modified: openoffice/branches/l10n/main/l10ntools/source/gCon.cxx openoffice/branches/l10n/main/l10ntools/source/gCon.hxx openoffice/branches/l10n/main/l10ntools/source/gConPo.hxx openoffice/branches/l10n/main/l10ntools/source/gConPoWrap.cxx openoffice/branches/l10n/main/l10ntools/source/gConPolex.l openoffice/branches/l10n/main/l10ntools/source/gHandler.cxx openoffice/branches/l10n/main/l10ntools/source/gL10nMem.cxx openoffice/branches/l10n/main/l10ntools/source/gL10nMem.hxx openoffice/branches/l10n/main/l10ntools/source/gL10nMemDB.cxx openoffice/branches/l10n/main/l10ntools/source/gLang.hxx Modified: openoffice/branches/l10n/main/l10ntools/source/gCon.cxx URL: http://svn.apache.org/viewvc/openoffice/branches/l10n/main/l10ntools/source/gCon.cxx?rev=1455330&r1=1455329&r2=1455330&view=diff ============================================================================== --- openoffice/branches/l10n/main/l10ntools/source/gCon.cxx (original) +++ openoffice/branches/l10n/main/l10ntools/source/gCon.cxx Mon Mar 11 21:08:23 2013 @@ -129,14 +129,16 @@ void convert_gen_impl::startSave(const s /********************** I M P L E M E N T A T I O N **********************/ -void convert_gen::save(const std::string& sKey, - const std::string& sENUStext, - const std::string& sText, - bool bFuzzy) +void convert_gen::save(const std::string& sFileName, + const std::string& sKey, + const std::string& sENUStext, + const std::string& sText, + bool bFuzzy) { - convert_gen_impl::mcImpl->save(sKey, sENUStext, sText, bFuzzy); + convert_gen_impl::mcImpl->save(sFileName, sKey, sENUStext, sText, bFuzzy); } -void convert_gen_impl::save(const std::string& sKey, +void convert_gen_impl::save(const std::string& sFileName, + const std::string& sKey, const std::string& sENUStext, const std::string& sText, bool bFuzzy) Modified: openoffice/branches/l10n/main/l10ntools/source/gCon.hxx URL: http://svn.apache.org/viewvc/openoffice/branches/l10n/main/l10ntools/source/gCon.hxx?rev=1455330&r1=1455329&r2=1455330&view=diff ============================================================================== --- openoffice/branches/l10n/main/l10ntools/source/gCon.hxx (original) +++ openoffice/branches/l10n/main/l10ntools/source/gCon.hxx Mon Mar 11 21:08:23 2013 @@ -54,7 +54,8 @@ class convert_gen_impl virtual void startSave(const std::string& sTargetDir, const std::string& sLanguage, const std::string& sFile); - virtual void save(const std::string& sKey, + virtual void save(const std::string& sFileName, + const std::string& sKey, const std::string& sENUStext, const std::string& sText, bool bFuzzy); Modified: openoffice/branches/l10n/main/l10ntools/source/gConPo.hxx URL: http://svn.apache.org/viewvc/openoffice/branches/l10n/main/l10ntools/source/gConPo.hxx?rev=1455330&r1=1455329&r2=1455330&view=diff ============================================================================== --- openoffice/branches/l10n/main/l10ntools/source/gConPo.hxx (original) +++ openoffice/branches/l10n/main/l10ntools/source/gConPo.hxx Mon Mar 11 21:08:23 2013 @@ -51,9 +51,11 @@ class convert_po : public convert_gen_im void setKey (char *syyText); void setMsgId (char *syyText); void setMsgStr (char *syyText); + void handleNL (char *syyText); private: - std::string msValue; + std::string msId; + std::string msStr; std::string msKey; bool mbFuzzy; std::filebuf outBuffer; @@ -63,7 +65,8 @@ class convert_po : public convert_gen_im void startSave(const std::string& sTargetDir, const std::string& sLanguage, const std::string& sFile); - void save(const std::string& sKey, + void save(const std::string& sFileName, + const std::string& sKey, const std::string& sENUStext, const std::string& sText, bool bFuzzy); Modified: openoffice/branches/l10n/main/l10ntools/source/gConPoWrap.cxx URL: http://svn.apache.org/viewvc/openoffice/branches/l10n/main/l10ntools/source/gConPoWrap.cxx?rev=1455330&r1=1455329&r2=1455330&view=diff ============================================================================== --- openoffice/branches/l10n/main/l10ntools/source/gConPoWrap.cxx (original) +++ openoffice/branches/l10n/main/l10ntools/source/gConPoWrap.cxx Mon Mar 11 21:08:23 2013 @@ -64,11 +64,26 @@ namespace PoWrap /********************** I M P L E M E N T A T I O N **********************/ void convert_po::startLook(char *syyText) { - //JIX startLook + std::string sFileName, sNewKey; + int i; + + + handleNL(syyText); + if (!msKey.size() || !msId.size() || !msStr.size()) + return; + + // split key into filename and real key + i = msKey.find(":"); + sFileName = msKey.substr(0, i); + sNewKey = msKey.substr(i+1); + + // load in db + mcMemory.loadEntryKey(miLineNo, sFileName, sNewKey, msId, msStr, mbFuzzy); + + // and prepare for new entry msKey.clear(); - msValue.clear(); - mbExpectId = - mbExpectStr = false; + msId.clear(); + msStr.clear(); } @@ -77,12 +92,18 @@ void convert_po::startLook(char *syyText void convert_po::setValue(char *syyText) { int inx; - + std::string sText(syyText); // find terminating " - msValue = syyText; - for (inx = msValue.size(); msValue[--inx] != '\"';) - msValue.erase(inx); + for (inx = sText.size(); sText[--inx] != '\"';) ; + sText.erase(inx); + + if (mbExpectId) + msId = sText; + if (mbExpectStr) + msStr = sText; + mbExpectId = + mbExpectStr = false; } @@ -104,11 +125,11 @@ void convert_po::setKey(char *syyText) // skip "#:" and any blanks - for (syyText += 2; *syyText == ' ' || *syyText == '\t';) ; + for (syyText += 2; *syyText == ' ' || *syyText == '\t'; ++syyText) ; msKey = syyText; // remove trailing blanks - for (i = msKey.size() -1; msKey[i] == ' ' || msKey[i] == '\t'; --i) ; + for (i = msKey.size() -1; msKey[i] == '\r' || msKey[i] == ' ' || msKey[i] == '\t'; --i) ; msKey.erase(i+1); } @@ -135,9 +156,19 @@ void convert_po::setMsgStr(char *syyText /********************** I M P L E M E N T A T I O N **********************/ +void convert_po::handleNL(char *syyText) +{ + mbExpectId = + mbExpectStr = false; +} + + + +/********************** I M P L E M E N T A T I O N **********************/ void convert_po::execute() { PoWrap::yylex(); + startLook(""); } @@ -178,20 +209,32 @@ void convert_po::startSave(const std::st << "#* under the License." << std::endl << "#*" << std::endl << "#************************************************************" << std::endl - << std::endl; + << "msgid \"\"" << std::endl + << "msgstr \"\"" << std::endl + << "\"Project-Id-Version: AOO-4-xx\\n\"" << std::endl + << "\"POT-Creation-Date: \\n\"" << std::endl + << "\"PO-Revision-Date: \\n\"" << std::endl + << "\"Last-Translator: genLang (build process)\\n\"" << std::endl + << "\"Language-Team: \\n\"" << std::endl + << "\"MIME-Version: 1.0\\n\"" << std::endl + << "\"Content-Type: text/plain; charset=iso-8859-1\\n\"" << std::endl + << "\"Content-Transfer-Encoding: 8bit\\n\"" << std::endl + << "\"X-Generator: genLang\\n\"" << std::endl + << std::endl; } /********************** I M P L E M E N T A T I O N **********************/ -void convert_po::save(const std::string& sKey, +void convert_po::save(const std::string& sFileName, + const std::string& sKey, const std::string& sENUStext, const std::string& sText, bool bFuzzy) { std::ostream outFile(&outBuffer); - outFile << std::endl << "#: " + sKey << std::endl; + outFile << std::endl << "#: " << sFileName << ":" << sKey << std::endl; if (bFuzzy) outFile << "#, fuzzy" << std::endl; outFile << "msgid \"" << sENUStext << "\"" << std::endl Modified: openoffice/branches/l10n/main/l10ntools/source/gConPolex.l URL: http://svn.apache.org/viewvc/openoffice/branches/l10n/main/l10ntools/source/gConPolex.l?rev=1455330&r1=1455329&r2=1455330&view=diff ============================================================================== --- openoffice/branches/l10n/main/l10ntools/source/gConPolex.l (original) +++ openoffice/branches/l10n/main/l10ntools/source/gConPolex.l Mon Mar 11 21:08:23 2013 @@ -100,13 +100,13 @@ SPACE [ \t]* } -<<EOF>> { +\n\r*\n { LOCptr->startLook(yytext); } -\n\r*\n { - LOCptr->startLook(yytext); +\n { + LOCptr->handleNL(yytext); } Modified: openoffice/branches/l10n/main/l10ntools/source/gHandler.cxx URL: http://svn.apache.org/viewvc/openoffice/branches/l10n/main/l10ntools/source/gHandler.cxx?rev=1455330&r1=1455329&r2=1455330&view=diff ============================================================================== --- openoffice/branches/l10n/main/l10ntools/source/gHandler.cxx (original) +++ openoffice/branches/l10n/main/l10ntools/source/gHandler.cxx Mon Mar 11 21:08:23 2013 @@ -264,7 +264,7 @@ void handler::runExtractMerge(bool bMerg } // and generate language file - mcMemory.save(msPoOutDir, bKid); + mcMemory.save(msPoOutDir, bKid, (msPoDir != msPoOutDir)); } @@ -293,7 +293,7 @@ void handler::runConvert() } // and generate language file - mcMemory.save(msPoOutDir, false); + mcMemory.save(msPoOutDir, false, (msPoDir != msPoOutDir)); } @@ -427,7 +427,7 @@ void handler::loadL10MEM() // load texts from en_US po file (master) { // tell system - l10nMem::showDebug("gLang loading master text from file " + sLoad); + l10nMem::showDebug("gLang loading master text from file " + sLoad + sMod); // and load file mcMemory.setLanguage("", true, false); @@ -437,13 +437,14 @@ void handler::loadL10MEM() // loop through all languages and load text for (std::vector<std::string>::iterator siLang = mvLanguages.begin(); siLang != mvLanguages.end(); ++siLang) { - sLoad = msPoDir + *siLang; - - // tell system - l10nMem::showDebug("gLang loading text from language file " + sLoad); + sLoad = msPoDir + *siLang + "/"; // get converter and extract files mcMemory.setLanguage(*siLang, true, false); + + // tell system + l10nMem::showDebug("gLang loading text from language file " + sLoad + sMod); + convert_gen(mcMemory, sLoad, sMod).execute(false, true); } } Modified: openoffice/branches/l10n/main/l10ntools/source/gL10nMem.cxx URL: http://svn.apache.org/viewvc/openoffice/branches/l10n/main/l10ntools/source/gL10nMem.cxx?rev=1455330&r1=1455329&r2=1455330&view=diff ============================================================================== --- openoffice/branches/l10n/main/l10ntools/source/gL10nMem.cxx (original) +++ openoffice/branches/l10n/main/l10ntools/source/gL10nMem.cxx Mon Mar 11 21:08:23 2013 @@ -95,10 +95,8 @@ bool l10nMem::checkKey(const std::string { return l10nMem_impl::mcImpl->mcDb.locateKey(0, sKey, sText, false); } void l10nMem::setSourceKey(int iL, const std::string& sF, const std::string& sK, const std::string& sT) { l10nMem_impl::mcImpl->setSourceKey(iL, sF, sK, sT); } -void l10nMem::reorganize() - { l10nMem_impl::mcImpl->mcDb.reorganize(); } -void l10nMem::save(const std::string& sT, bool bK) - { l10nMem_impl::mcImpl->save(*this, sT, bK); } +void l10nMem::save(const std::string& sT, bool bK, bool bF) + { l10nMem_impl::mcImpl->save(*this, sT, bK, bF); } void l10nMem::dumpMem(const std::string& sT) { l10nMem_impl::mcImpl->dumpMem(sT); } @@ -205,28 +203,36 @@ void l10nMem_impl::setSourceKey(int /********************** I M P L E M E N T A T I O N **********************/ -void l10nMem_impl::save(l10nMem& cMem, const std::string& sTargetDir, bool bKid) +void l10nMem_impl::save(l10nMem& cMem, const std::string& sTargetDir, bool bKid, bool bForce) { - //JIX save HANDLE KID - if (mbInError) - throw l10nMem::showError("Cannot save due to previous errors"); + int iE, iEsize = mcDb.mcENUSlist.size(); + int iL, iLsize = mcDb.mcLangList.size(); + int iCntDeleted = 0, iCntChanged = 0, iCntAdded = 0; + std::string sFileName = msModuleName + ".po"; + + // and reorganize db if needed + mcDb.reorganize(); + + // no save if there has been errors + if(!needWrite(sFileName, bForce)) + return; - int iE, iEsize = mcDb.mcENUSlist.size(); - int iL, iLsize = mcDb.mcLangList.size(); - std::string fileName = msModuleName + ".po"; + //JIX save HANDLE KID // Save en_US { - convert_gen savePo(cMem, sTargetDir, fileName); + convert_gen savePo(cMem, sTargetDir, sFileName); - savePo.startSave(sTargetDir, "en_US", fileName); + savePo.startSave(sTargetDir, "en_US", sFileName); for (iE = 1; iE < iEsize; ++iE) { l10nMem_enus_entry& cE = mcDb.mcENUSlist[iE]; - std::string newKey = mcDb.mcFileList[cE.miFileInx].msFileName + ":" + cE.msKey; + // remove deleted entries + if (cE.meState == l10nMem::ENTRY_DELETED) + continue; - savePo.save(newKey, cE.msText, cE.msText, false); + savePo.save(mcDb.mcFileList[cE.miFileInx].msFileName, cE.msKey, cE.msText, cE.msText, false); } savePo.endSave(); } @@ -234,18 +240,20 @@ void l10nMem_impl::save(l10nMem& cMem, c // save all languages for (iL = 1; iL < iLsize; ++iL) { - convert_gen savePo(cMem, sTargetDir, fileName); + convert_gen savePo(cMem, sTargetDir, sFileName); - savePo.startSave(sTargetDir, mcDb.mcLangList[iL], fileName); + savePo.startSave(sTargetDir, mcDb.mcLangList[iL], sFileName); for (iE = 1; iE < iEsize; ++iE) { l10nMem_enus_entry& cE = mcDb.mcENUSlist[iE]; l10nMem_lang_entry& cL = cE.mcLangList[iL]; bool bF = cL.mbFuzzy || (cE.meState == l10nMem::ENTRY_CHANGED); - std::string newKey = mcDb.mcFileList[cE.miFileInx].msFileName + ":" + cE.msKey; + // remove deleted entries + if (cE.meState == l10nMem::ENTRY_DELETED) + continue; - savePo.save(newKey, cE.msText, cL.msText, false); + savePo.save(mcDb.mcFileList[cE.miFileInx].msFileName, cE.msKey, cE.msText, cL.msText, bF); } savePo.endSave(); } @@ -254,14 +262,15 @@ void l10nMem_impl::save(l10nMem& cMem, c /********************** I M P L E M E N T A T I O N **********************/ -void l10nMem_impl::dumpMem(const std::string& srTargetFile) +void l10nMem_impl::dumpMem(const std::string& sFileName) { - std::string x; + // and reorganize db if needed + mcDb.reorganize(); - if (mbInError) - throw l10nMem::showError("Cannot generate fast load file due to previous errors"); + // no save if there has been errors + if(!needWrite(sFileName, true)) + return; - x = srTargetFile; // JIX (dumpMem) } @@ -273,7 +282,7 @@ void l10nMem_impl::formatAndShowText(con std::string& cFile = mcDb.mcFileList[mcDb.miCurFileInx].msFileName; std::cerr << sType; - if (cFile.size()) + if (mcDb.miCurFileInx > 0) std::cerr << " in " << mcDb.mcFileList[mcDb.miCurFileInx].msFileName; if (iLineNo) std::cerr << "(" << iLineNo << ")"; @@ -283,6 +292,47 @@ void l10nMem_impl::formatAndShowText(con /********************** I M P L E M E N T A T I O N **********************/ +bool l10nMem_impl::needWrite(const std::string sFileName, bool bForce) +{ + int iE, iEsize = mcDb.mcENUSlist.size(); + int iCntDeleted = 0, iCntChanged = 0, iCntAdded = 0; + + // no save if there has been errors + if (mbInError) + throw l10nMem::showError("Cannot save due to previous errors"); + + // Check number of changes + for (iE = 1; iE < iEsize; ++iE) + { + l10nMem_enus_entry& cur = mcDb.mcENUSlist[iE]; + if (cur.meState == l10nMem::ENTRY_ADDED) + ++iCntAdded; + if (cur.meState == l10nMem::ENTRY_CHANGED) + ++iCntChanged; + if (cur.meState == l10nMem::ENTRY_DELETED) + ++iCntDeleted; + } + iCntDeleted -= iCntChanged; + if (!iCntAdded && !iCntChanged && !iCntDeleted) + { + std::cout << "genLang: No changes in " << sFileName; + if (bForce) + std::cout << ", -o switch used, so files are saved" << std::endl; + else + std::cout << " skipping \"save\"" << std::endl; + return bForce; + } + + std::cout << "genLang statistics: " << iCntDeleted << " deleted, " + << iCntChanged << " changed, " + << iCntAdded << " added entries in " + << sFileName << std::endl; + return true; +} + + + +/********************** I M P L E M E N T A T I O N **********************/ void l10nMem_impl::convEntryKey(int iLineNo, const std::string& sSourceFile, const std::string& sKey, Modified: openoffice/branches/l10n/main/l10ntools/source/gL10nMem.hxx URL: http://svn.apache.org/viewvc/openoffice/branches/l10n/main/l10ntools/source/gL10nMem.hxx?rev=1455330&r1=1455329&r2=1455330&view=diff ============================================================================== --- openoffice/branches/l10n/main/l10ntools/source/gL10nMem.hxx (original) +++ openoffice/branches/l10n/main/l10ntools/source/gL10nMem.hxx Mon Mar 11 21:08:23 2013 @@ -54,6 +54,7 @@ class l10nMem_enus_entry const std::string& sText, int iLineNo, int iFileInx, + int iLangSize, l10nMem::ENTRY_STATE eState); ~l10nMem_enus_entry(); @@ -93,7 +94,6 @@ class l10nMem_db int miCurENUSinx; int miCurLastENUSinx; bool mbNeedWrite; - bool mbReorganizeNeeded; bool mbConvertMode; std::vector<l10nMem_enus_entry> mcENUSlist; std::vector<l10nMem_file_entry> mcFileList; @@ -120,7 +120,7 @@ class l10nMem_db const std::string& sKey, const std::string& sText, bool bThrow = true); - void reorganize(); + void reorganize (); void addKey (int iLineNo, const std::string& sKey, const std::string& sText, @@ -156,7 +156,8 @@ class l10nMem_impl void save (l10nMem& cMem, const std::string& sTargetDir, - bool bKid); + bool bKid, + bool bForce); void dumpMem (const std::string& sTargetDir); private: @@ -168,6 +169,7 @@ class l10nMem_impl bool mbInError; void formatAndShowText(const std::string& sType, int iLineNo, const std::string& sText); + bool needWrite (const std::string sFileName, bool bForce); void convEntryKey (int iLineNo, const std::string& sSourceFile, const std::string& sKey, Modified: openoffice/branches/l10n/main/l10ntools/source/gL10nMemDB.cxx URL: http://svn.apache.org/viewvc/openoffice/branches/l10n/main/l10ntools/source/gL10nMemDB.cxx?rev=1455330&r1=1455329&r2=1455330&view=diff ============================================================================== --- openoffice/branches/l10n/main/l10ntools/source/gL10nMemDB.cxx (original) +++ openoffice/branches/l10n/main/l10ntools/source/gL10nMemDB.cxx Mon Mar 11 21:08:23 2013 @@ -55,6 +55,7 @@ l10nMem_enus_entry::l10nMem_enus_entry(c const std::string& sText, int iLineNo, int iFileInx, + int iLangSize, l10nMem::ENTRY_STATE eState) : msKey(sKey), @@ -63,6 +64,8 @@ l10nMem_enus_entry::l10nMem_enus_entry(c miFileInx(iFileInx), miLineNo(iLineNo) { + for (int i = 0; i < iLangSize; ++i) + mcLangList.push_back(l10nMem_lang_entry("", false)); } @@ -100,12 +103,11 @@ l10nMem_db::l10nMem_db() miCurENUSinx(0), miCurLastENUSinx(0), mbNeedWrite(false), - mbReorganizeNeeded(false), mbConvertMode(false) { - mcFileList.push_back(l10nMem_file_entry("", 0)); - mcLangList.push_back(""); - mcENUSlist.push_back(l10nMem_enus_entry("", "", 0, 0, l10nMem::ENTRY_DELETED)); + mcFileList.push_back(l10nMem_file_entry("-genLang-", 0)); + mcLangList.push_back("-genLang-"); + mcENUSlist.push_back(l10nMem_enus_entry("-genLang-", "-genLang-", 0, 0, 0, l10nMem::ENTRY_DELETED)); } @@ -145,10 +147,14 @@ void l10nMem_db::setLanguage(const std:: // regular load or convert of old po files mbConvertMode = bConvert; + miCurFileInx = 0; // With no languages selected only en_US is generated if (!sLanguage.size()) + { miCurLangInx = 0; + return; + } // en_US is loaded as master and cannot be loaded again if (sLanguage == "en_US") @@ -226,6 +232,39 @@ void l10nMem_db::loadLangKey(int /********************** I M P L E M E N T A T I O N **********************/ void l10nMem_db::reorganize() { + int iE, iEsize = mcENUSlist.size(); + int iD, iDsize; + std::vector<int> listDel, listAdd; + + + // Check number of changes + for (iE = 1; iE < iEsize; ++iE) + { + l10nMem_enus_entry& cur = mcENUSlist[iE]; + if (cur.meState == l10nMem::ENTRY_ADDED) + listAdd.push_back(iE); + if (cur.meState == l10nMem::ENTRY_DELETED) + listDel.push_back(iE); + } + if (!listDel.size() || !listAdd.size()) + return; + + // loop through added text and see if key match deleted text + iEsize = listAdd.size(); + iDsize = listDel.size(); + for (iE = 0; iE < iEsize; ++iE) + { + l10nMem_enus_entry& curAdd = mcENUSlist[listAdd[iE]]; + for (iD = 0; iD < iDsize && mcENUSlist[listDel[iD]].msKey != curAdd.msKey; ++iD) ; + if (iD == iDsize) + continue; + + // Update deleted entry (original), because lang is connected here + l10nMem_enus_entry& curDel = mcENUSlist[listDel[iD]]; + curDel.msText = curAdd.msText; + curDel.meState = l10nMem::ENTRY_CHANGED; + curAdd.meState = l10nMem::ENTRY_DELETED; + } // JIX (reorganize) } @@ -272,6 +311,7 @@ void l10nMem_db::addKey(int { // JIX. addKey, handle fuzzy bit in lang (if changed). miCurENUSinx = mcENUSlist.size(); - mcENUSlist.push_back(l10nMem_enus_entry(sKey, sText, iLineNo, miCurFileInx, eStat)); + mcENUSlist.push_back(l10nMem_enus_entry(sKey, sText, iLineNo, miCurFileInx, + mcLangList.size(), eStat)); miCurLastENUSinx = mcFileList[miCurFileInx].miEnd = miCurENUSinx; } Modified: openoffice/branches/l10n/main/l10ntools/source/gLang.hxx URL: http://svn.apache.org/viewvc/openoffice/branches/l10n/main/l10ntools/source/gLang.hxx?rev=1455330&r1=1455329&r2=1455330&view=diff ============================================================================== --- openoffice/branches/l10n/main/l10ntools/source/gLang.hxx (original) +++ openoffice/branches/l10n/main/l10ntools/source/gLang.hxx Mon Mar 11 21:08:23 2013 @@ -83,10 +83,10 @@ class l10nMem const std::string& sFilename, const std::string& sKey, const std::string& sText); - void reorganize (); void save (const std::string& sTargetDir, - bool bKid); + bool bKid, + bool bForce); void dumpMem (const std::string& sTargetDir); }; @@ -107,7 +107,8 @@ class convert_gen void startSave(const std::string& sTargetDir, const std::string& sLanguage, const std::string& sFile); - void save(const std::string& sKey, + void save(const std::string& sFileName, + const std::string& sKey, const std::string& sENUStext, const std::string& sText, bool bFuzzy);