diff options
Diffstat (limited to 'l10ntools/source/uimerge.cxx')
-rw-r--r-- | l10ntools/source/uimerge.cxx | 215 |
1 files changed, 0 insertions, 215 deletions
diff --git a/l10ntools/source/uimerge.cxx b/l10ntools/source/uimerge.cxx deleted file mode 100644 index 0bc13697cd8e..000000000000 --- a/l10ntools/source/uimerge.cxx +++ /dev/null @@ -1,215 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ - -#include <sal/main.h> - -#include <osl/file.hxx> - -#include <rtl/strbuf.hxx> - -#include <libexslt/exslt.h> -#include <libxslt/transform.h> -#include <libxslt/xslt.h> -#include <libxslt/xsltutils.h> - -#include <stdio.h> - -#include "common.hxx" -#include "helper.hxx" -#include "export.hxx" -#include "tokens.h" -#include "po.hxx" -#include <iostream> -#include <fstream> -#include <vector> - -static OString sInputFileName; -static OString sOutputFile; - -int extractTranslations() -{ - PoOfstream aPOStream( sOutputFile, PoOfstream::APP); - if (!aPOStream.isOpen()) - { - fprintf(stderr, "cannot open %s\n", sOutputFile.getStr()); - return 1; - } - - exsltRegisterAll(); - - OString sStyleSheet = OString(getenv("SRC_ROOT")) + OString("/solenv/bin/uilangfilter.xslt"); - - xsltStylesheetPtr stylesheet = xsltParseStylesheetFile (reinterpret_cast<const xmlChar *>(sStyleSheet.getStr())); - - xmlDocPtr doc = xmlParseFile(sInputFileName.getStr()); - - xmlDocPtr res = xsltApplyStylesheet(stylesheet, doc, nullptr); - - for( xmlNodePtr nodeLevel1 = res->children; nodeLevel1 != nullptr; nodeLevel1 = nodeLevel1->next) - { - for( xmlNodePtr nodeLevel2 = nodeLevel1->children; nodeLevel2 != nullptr; nodeLevel2 = nodeLevel2->next) - { - if (nodeLevel2->type == XML_ELEMENT_NODE) - { - std::vector<OString> vIDs; - for(xmlAttrPtr attribute = nodeLevel2->properties; attribute != nullptr; attribute = attribute->next) - { - xmlChar *content = xmlNodeListGetString(res, attribute->children, 1); - vIDs.push_back(helper::xmlStrToOString(content)); - xmlFree(content); - } - OString sText = helper::UnQuotHTML(helper::xmlStrToOString(xmlNodeGetContent(nodeLevel2))); - common::writePoEntry( - "Uiex", aPOStream, sInputFileName, vIDs[0], - (vIDs.size()>=2) ? vIDs[1] : OString(), - (vIDs.size()>=3) ? vIDs[2] : OString(), - OString(), sText); - } - } - } - - xmlFreeDoc(res); - - xmlFreeDoc(doc); - - xsltFreeStylesheet(stylesheet); - - aPOStream.close(); - - return 0; -} - -namespace -{ - bool lcl_MergeLang( - const MergeDataHashMap &rMap, - const OString &rLanguage, - const OString &rDestinationFile) - { - std::ofstream aDestination( - rDestinationFile.getStr(), std::ios_base::out | std::ios_base::trunc); - if (!aDestination.is_open()) { - return false; - } - - aDestination << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"; - aDestination << "<t>\n"; - - for (MergeDataHashMap::const_iterator aI = rMap.begin(), aEnd = rMap.end(); aI != aEnd; ++aI) - { - if (aI->second->sGID.isEmpty()) - continue; - - MergeEntrys* pEntrys = aI->second->GetMergeEntries(); - OString sOut; - pEntrys->GetText( sOut, StringType::Text, rLanguage ); - - if (sOut.isEmpty()) - continue; - - aDestination << " <e g=\"" << aI->second->sGID << "\" i=\"" - << aI->second->sLID << "\">" - << helper::QuotHTML(sOut) << "</e>\n"; - } - - aDestination << "</t>"; - aDestination.close(); - - return true; - } - -} - -bool Merge( - const OString &rPOFile, - const OString &rSourceFile, - const OString &rDestinationDir, - const OString &rLanguage ) -{ - { - bool bDestinationIsDir(false); - - const OUString aDestDir(OStringToOUString(rDestinationDir, RTL_TEXTENCODING_UTF8)); - OUString aDestDirUrl; - if (osl::FileBase::E_None == osl::FileBase::getFileURLFromSystemPath(aDestDir, aDestDirUrl)) - { - osl::DirectoryItem aTmp; - if (osl::DirectoryItem::E_None == osl::DirectoryItem::get(aDestDirUrl, aTmp)) - { - osl::FileStatus aDestinationStatus(osl_FileStatus_Mask_Type); - if (osl::DirectoryItem::E_None == aTmp.getFileStatus(aDestinationStatus)) - bDestinationIsDir = aDestinationStatus.isDirectory(); - } - } - - if (!bDestinationIsDir) - { - fprintf(stderr, "%s must be a directory\n", rDestinationDir.getStr()); - return false; - } - } - - MergeDataFile aMergeDataFile( rPOFile, rSourceFile, false ); - std::vector<OString> aLanguages; - if( rLanguage.equalsIgnoreAsciiCase("ALL") ) - aLanguages = aMergeDataFile.GetLanguages(); - else - aLanguages.push_back(rLanguage); - - const MergeDataHashMap& rMap = aMergeDataFile.getMap(); - const OString aDestinationDir(rDestinationDir + "/"); - - bool bResult = true; - for(size_t n = 0; n < aLanguages.size(); ++n) - { - OString sCur = aLanguages[ n ]; - if (sCur.isEmpty() || sCur.equalsIgnoreAsciiCase("en-US")) - continue; - const OString aDestinationFile(aDestinationDir + sCur + ".ui"); - if (!lcl_MergeLang(rMap, sCur, aDestinationFile)) - bResult = false; - } - - return bResult; -} - -SAL_IMPLEMENT_MAIN_WITH_ARGS(argc, argv) -{ - int nRetValue = 0; - try - { - - common::HandledArgs aArgs; - if ( !common::handleArguments(argc, argv, aArgs) ) - { - common::writeUsage("uiex","*.ui"); - return 1; - } - - sInputFileName = aArgs.m_sInputFile; - sOutputFile = aArgs.m_sOutputFile; - - if (!aArgs.m_bMergeMode) - { - nRetValue = extractTranslations(); - } - else - { - Merge(aArgs.m_sMergeSrc, sInputFileName, sOutputFile, aArgs.m_sLanguage); - } - } - catch (std::exception& e) - { - fprintf(stderr, "exception: %s\n", e.what()); - return 1; - } - return nRetValue; -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |