summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjan iversen <jani@documentfoundation.org>2016-03-14 14:48:00 +0100
committerjan iversen <jani@documentfoundation.org>2016-03-14 15:09:19 +0100
commit4cbb7cdf1be8219c34eb38e6a0d59aa8418c8a85 (patch)
tree7cfface5ee20f61055d64e32b73ac66feac20ea0
parent872755ac336eb9ad33c6c98dd73deea2206acf71 (diff)
genLang update
removed source/gHandler.cxx is now part of gLang.cxx (and defined as a local class) Change-Id: I6fccfb9d9cebe964ba4458cdea5121a44186c1ab
-rw-r--r--l10ntools/source/gHandler.cxx531
1 files changed, 0 insertions, 531 deletions
diff --git a/l10ntools/source/gHandler.cxx b/l10ntools/source/gHandler.cxx
deleted file mode 100644
index be955638f8d7..000000000000
--- a/l10ntools/source/gHandler.cxx
+++ /dev/null
@@ -1,531 +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/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#include <iostream>
-#include "gLang.hxx"
-#include <cstdlib>
-#include <iostream>
-#include <fstream>
-
-
-
-/*****************************************************************************
- ************************ G H A N D L E R . C X X ************************
- *****************************************************************************
- * This is the control module, that interpret the command line and implement
- * the different work types
- * extract / merge / generate / convert
- *****************************************************************************/
-
-
-
-/********************** I M P L E M E N T A T I O N **********************/
-handler::handler()
- :
- mbForceSave(false)
-{
-}
-
-
-
-/********************** I M P L E M E N T A T I O N **********************/
-handler::~handler()
-{
-}
-
-
-
-/********************** I M P L E M E N T A T I O N **********************/
-void handler::checkCommandLine(int argc, char *argv[])
-{
- enum {ARG_NONE, ARG_F, ARG_O, ARG_S, ARG_T} eGotArg = ARG_NONE;
- std::string sWorkText, sLangText;
- int argNow, nLen;
-
-
- // make internal throw test (to avoid if cascades
- try
- {
- // check for fixed parameter: genLang <cmd> <module> <po dir> <languages>
- if (argc <= 5)
- throw "Not enough parameters";
-
- // check for working mode
- sWorkText = argv[1];
- if (sWorkText == "convert") meWorkMode = DO_CONVERT;
- else if (sWorkText == "extract") meWorkMode = DO_EXTRACT;
- else if (sWorkText == "merge") meWorkMode = DO_MERGE;
- else if (sWorkText == "help") showManual();
- else throw "<command> is mandatory";
-
- // and set fixed parameters
- msModuleName = argv[2];
- msPoOutDir = msPoDir = argv[3];
- sLangText = argv[4];
- if (sLangText[0] == '\"')
- sLangText.erase(0,1);
- nLen = sLangText.size() -1;
- if (nLen > 0 && sLangText[nLen] == '\"')
- sLangText.erase(nLen);
-
- // decode parameters and translate to variables
- for (argNow = 5; argNow < argc;)
- {
- std::string sArg(argv[argNow++]);
-
- // all -x is followed by a directory/file name
- if (sArg[0] == '-')
- {
- // Terminate collection ?
- if (eGotArg == ARG_F)
- eGotArg = ARG_NONE;
-
- // Are we waiting for a directory
- if (eGotArg != ARG_NONE)
- throw std::string("missing argument to ") + argv[argNow-1];
-
- // is it a known parameter
- if (sArg == "-d") {l10nMem::setShowDebug(); }
- else if (sArg == "-f") {eGotArg = ARG_F; }
- else if (sArg == "-k") {if (meWorkMode == DO_EXTRACT)
- meWorkMode = DO_EXTRACT_KID;
- else
- throw "-k is not valid"; }
- else if (sArg == "-o") {eGotArg = ARG_O; mbForceSave = true; }
- else if (sArg == "-p") {if (meWorkMode == DO_CONVERT)
- meWorkMode = DO_CONVERT_POT;
- else
- throw "-p is not valid"; }
- else if (sArg == "-s") {eGotArg = ARG_S; }
- else if (sArg == "-t") {eGotArg = ARG_T; }
- else if (sArg == "-v") {l10nMem::setShowVerbose(); }
- else throw std::string("unknown parameter: ") + sArg;
- }
- else
- {
- switch (eGotArg)
- {
- case ARG_NONE: break;
- case ARG_F: mvSourceFiles.push_back(sArg); break;
- case ARG_O: msPoOutDir = sArg; eGotArg = ARG_NONE; break;
- case ARG_S: msSourceDir = sArg; eGotArg = ARG_NONE; break;
- case ARG_T: msTargetDir = sArg; eGotArg = ARG_NONE; break;
- }
- }
- }
-
- // Check parameters mandatory for all commands
- if (!msModuleName.size())
- throw "<module name> is mandatory";
- if (!msPoDir.size())
- throw "<po dir> is mandatory";
-
- // control parameter usage according to selected action;
- {
- int useLangText, useSoption, useToption;
- useLangText = useSoption = useToption = -1;
-
- if (!mvSourceFiles.size())
- throw "-f <files> is missing or empty";
-
- switch (meWorkMode)
- {
- case DO_EXTRACT:
- case DO_EXTRACT_KID:
- break;
-
- case DO_MERGE:
- useSoption = 0;
- useLangText = 1;
- useToption = 1;
- break;
-
- case DO_CONVERT:
- useLangText = 1;
- case DO_CONVERT_POT:
- useToption = 1;
- break;
- }
-
- if (sLangText.size() && useLangText == -1)
- throw "<languages> must be empty";
- if (!sLangText.size() && useLangText == 1)
- throw "<languages> is mandatory";
- if (msSourceDir.size() && useSoption == -1)
- throw "-s <source dir> is not valid";
- if (msSourceDir.size() && useSoption == 1)
- throw "-s <source dir> is mandatory";
- if (msTargetDir.size() && useToption == -1)
- throw "-t <target dir> is not valid";
- if (!msTargetDir.size() && useToption == 1)
- throw "-t <target dir> is mandatory";
- }
-
- if (msTargetDir.size() && !convert_gen::checkAccess(msTargetDir))
- throw "<target dir> does not exist";
- if (msSourceDir.size() && !convert_gen::checkAccess(msSourceDir))
- throw "<source dir> does not exist";
- }
- catch(const char *sErr)
- {
- std::string myErr(sErr);
- showUsage(myErr);
- exit(-1);
- }
- catch(std::string sErr)
- {
- showUsage(sErr);
- exit(-1);
- }
-
- // update directories to include final /
- nLen = msSourceDir.size();
- if (nLen && msSourceDir.at(nLen-1) != '/')
- msSourceDir.append("/");
- nLen = msTargetDir.size();
- if (nLen && msTargetDir.at(nLen-1) != '/')
- msTargetDir.append("/");
- nLen = msPoDir.size();
- if (nLen && msPoDir.at(nLen-1) != '/')
- msPoDir.append("/");
- nLen = msPoOutDir.size();
- if (nLen && msPoOutDir.at(nLen-1) != '/')
- msPoOutDir.append("/");
-
- // and convert language to a vector
- if (sLangText.size())
- {
- int current;
- int next = -1;
- do
- {
- current = next + 1;
- next = sLangText.find_first_of( " ", current );
- std::string sNewLang = sLangText.substr(current,next-current);
- if (sNewLang != "en-US")
- mvLanguages.push_back(sLangText.substr(current,next-current));
- }
- while (next != (int)std::string::npos);
- }
-
- // check if source files list needs to be coverted
- if (mvSourceFiles[0] == "USEFILE:")
- readFileWithSources();
-
- // tell system
- l10nMem::showVerbose("genLang starting to " + sWorkText + " from module " + msModuleName);
-}
-
-
-
-/********************** I M P L E M E N T A T I O N **********************/
-void handler::run()
-{
- try
- {
- // prepare translation memory to module type
- mcMemory.setModuleName(msModuleName);
-
- // build list of languages (to be loaded and later written
- if (msPoDir.size())
- loadL10MEM( (meWorkMode == DO_EXTRACT) );
-
- // use workMode to start correct control part
- switch (meWorkMode)
- {
- case DO_EXTRACT: runExtract(false); break;
- case DO_EXTRACT_KID: runExtract(true); break;
- case DO_MERGE: runMerge(); break;
- case DO_CONVERT: runConvert(false); break;
- case DO_CONVERT_POT: runConvert(true); break;
- }
- }
- catch(int)
- {
- exit(-1);
- }
-}
-
-
-
-/********************** I M P L E M E N T A T I O N **********************/
-void handler::runExtract(bool bKid)
-{
- // just to satisfy compiler
- if (bKid)
- return;
-
- // no convert
- mcMemory.setConvert(false, false);
-
- // loop through all source files, and extract messages from each file
- for (std::vector<std::string>::iterator siSource = mvSourceFiles.begin(); siSource != mvSourceFiles.end(); ++siSource)
- {
- // tell system
- l10nMem::showDebug("genLang extracting text from file " + msSourceDir + *siSource);
-
- // get converter and extract file
- convert_gen convertObj(mcMemory, msSourceDir, msTargetDir, *siSource);
- convertObj.execute(false);
- }
-
- // and generate language file
- mcMemory.saveTemplates(msPoOutDir, false, mbForceSave);
-}
-
-
-
-/********************** I M P L E M E N T A T I O N **********************/
-void handler::runMerge()
-{
- // no convert
- mcMemory.setConvert(false, false);
-
- // loop through all source files, and extract messages from each file
- for (std::vector<std::string>::iterator siSource = mvSourceFiles.begin(); siSource != mvSourceFiles.end(); ++siSource)
- {
- // tell system
- l10nMem::showDebug("genLang merging translated text to file " + msSourceDir + *siSource);
-
- // get converter and extract file
- convert_gen convertObj(mcMemory, msSourceDir, msTargetDir, *siSource);
- convertObj.execute(true);
- }
-}
-
-
-
-/********************** I M P L E M E N T A T I O N **********************/
-void handler::runConvert(bool bPot)
-{
- // convert
- mcMemory.setConvert(true, bPot);
-
- // loop through all source files, and extract messages from each file
- for (std::vector<std::string>::iterator siSource = mvSourceFiles.begin(); siSource != mvSourceFiles.end(); ++siSource)
- {
- // handle .pot (templates)
- if (bPot)
- {
- // tell system
- l10nMem::showDebug("genLang compare template " + msSourceDir + *siSource);
-
- // get converter and extract files
- convert_gen convertObj(mcMemory, "./", msTargetDir, *siSource);
- convertObj.execute(false);
-
- if (bPot)
- mcMemory.showNOconvert();
- }
- else
- for (std::vector<std::string>::iterator siLang = mvLanguages.begin(); siLang != mvLanguages.end(); ++siLang)
- {
- std::string sFilePath = msSourceDir + *siLang + "/";
-
- // get converter and extract files
- mcMemory.setLanguage(*siLang, false);
-
- // tell system
- l10nMem::showDebug("genLang convert text from file " + sFilePath + *siSource + " language " + *siLang);
-
- // get converter and extract files
- convert_gen convertObj(mcMemory, sFilePath, msTargetDir, *siSource);
- convertObj.execute(true);
- }
- }
-
- // and generate language file
- if (!bPot)
- mcMemory.saveLanguages(msPoOutDir, mbForceSave);
-}
-
-
-
-/********************** I M P L E M E N T A T I O N **********************/
-void handler::showUsage(std::string& sErr)
-{
- // do we have an error text ?
- if (sErr.size())
- std::cerr << "commandline error:" << sErr << std::endl;
-
- std::cout <<
- "syntax oveview, use \"genLang help\" for full description\n"
- "genLang <cmd> <module> <po dir> <languages> [-d] [-f <files>] [-k] [-o <dir>] [-p] [-s <dir>] [-t <dir>] [-v]\n"
- "<cmd> is one of \"convert\", \"extract\", \"help\", \"merge\",\n";
-
- exit(-1);
-}
-
-
-
-/********************** I M P L E M E N T A T I O N **********************/
-void handler::showManual()
-{
- // give the correct usage
- std::cout <<
- "genLang (c)2013 by Apache Software Foundation\n"
- "=============================================\n"
- "As part of the L10N framework for Apache Open Office (AOO),\n"
- "genLang extracts en-US texts sources of the following types:\n"
- " .xrm, .xhp, .xcu, .xcs, .ulf, .tree, .src, .prop and .po (.pot)\n"
- "and merges with .po files in different languages.\n"
- "genLang uses .po files and AOO sources to generate language sources.\n"
- "\n"
- "genLang can also convert old .po files (generated from .sdf)\n"
- "\n";
-
- std::cout <<
- "Syntax:\n"
- " genLang extract <module> <po dir> \"\" [-v] [-d] \\\n"
- " -f <files> [-s <source dir>]\n"
- " if -s is omitted . is used\n"
- " extract text from <source dir>/<files>, result is merged and\n"
- " written to <po dir>/<module>.pot\n"
- "\n";
- std::cout <<
- " genLang merge <module> <po dir> <languages> [-v] [-d] [-k]\\\n"
- " [-o <po outdir>] -f <files> [-s <source dir>] \\\n"
- " -t <target dir>\n"
- " works as \"extract\" and additionally merges\n"
- " <source dir>/<files> with all native language text\n"
- " from <po dir>/*lang/<module>.po\n"
- " The result is stored in <target dir>/<files>\n"
- "\n";
- std::cout <<
- " genLang convert <module> <po dir> <languages> [-v] [-d]\\\n"
- " [-p] [-o <po outdir>] -s <source dir> -f <files>\n"
- " reads sdf generated .po <files> from\n"
- " <source dir>/*lang/<module>.po\n"
- " and merges with\n"
- " <po dir>/*lang/<module>.po\n"
- " Result is written to <po outdir>/*lang/<module>.po if\n"
- " present or <po dir>/*lang/<module>.po is overwritten\n"
- " - Keys in <source dir>, not in <module>.po\n"
- " are shown as warnings\n"
- " - Keys in <source dir>, with changed translation\n"
- " are marked \"fuzzy\"\n"
- " - Keys in source files not in .po files (new keys)\n"
- " are added and marked \"fuzzy\"\n"
- " if -p is used, .pot files is assumed, and a compare is made\n"
- "\n";
- std::cout <<
- " genLang help\n"
- " this text\n"
- "\n";
- std::cout <<
- "Parameters:\n"
- " <module>\n"
- " name of module (directory in main)\n"
- " <po dir>\n"
- " directory containing a directory for each language which contains\n"
- " a .po file for each module or a module.dbpo file for fast loading\n"
- " <languages>\n"
- " comma separated string with langauge id to be used\n"
- "\n"
- " -d\n"
- " extensive verbose mode, tells what genLang is doing in detail\n"
- " -f <files>\n"
- " list of files containing messages to be extracted\n"
- " \"convert\" expect sdf generated po files, to be converted\n"
- " instead of passing a list of files, it is possible to pass\n"
- " a file contains the list, by using:\n"
- " -f USEFILE: <filename>\n"
- " -k\n"
- " generate kid id (hex) for all messages in the source code,\n"
- " solely for QA\n"
- " -o <po outdir>\n"
- " directory to write .po files, same structure as -p\n"
- " -p\n"
- " used with convert, when comparing .pot files (old system == new system)\n"
- " -s <source dir>\n"
- " directory containing all source files (root path for <files>\n"
- " -t <target dir>\n"
- " <directory> used to write merged source files (root path for <files>\n"
- " -v\n"
- " verbose mode, tells what genLang is doing\n";
-
- exit(0);
-}
-
-
-
-/********************** I M P L E M E N T A T I O N **********************/
-void handler::loadL10MEM(bool onlyTemplates)
-{
- std::string sMod = msModuleName + ".pot";
- std::string sLoad = msPoDir + "templates/";
-
- // no convert
- mcMemory.setConvert(false, false);
-
- // load texts from en-US po file (master)
- // tell system
- l10nMem::showDebug("genLang loading master text from file " + sLoad + sMod);
-
- // and load file
- mcMemory.setLanguage("", true);
- convert_gen (mcMemory, sLoad, msTargetDir, sMod).execute(false);
-
- if (onlyTemplates)
- return;
-
- // loop through all languages and load text
- sMod = msModuleName + ".po";
- for (std::vector<std::string>::iterator siLang = mvLanguages.begin(); siLang != mvLanguages.end(); ++siLang)
- {
- sLoad = msPoDir + *siLang + "/";
-
- // get converter and extract files
- mcMemory.setLanguage(*siLang, true);
-
- // tell system
- l10nMem::showDebug("genLang loading text from language file " + sLoad + sMod);
-
- convert_gen(mcMemory, sLoad, msTargetDir, sMod).execute(false);
- }
-}
-
-
-
-/********************** I M P L E M E N T A T I O N **********************/
-void handler::readFileWithSources()
-{
- std::ifstream fInput;
- char buf[256];
-
-
- if (mvSourceFiles.size() < 2)
- throw l10nMem::showError("missing file with sources (-f USEFILE: <filename>)");
-
- fInput.open (mvSourceFiles[1].c_str(), std::ifstream::in);
- if (!fInput.is_open())
- throw l10nMem::showError("Cannot open file with sources (-f), trying to open" + mvSourceFiles[1]);
-
- mvSourceFiles.clear();
-
- while (fInput.good())
- {
- fInput.getline(buf, sizeof(buf));
- if (!buf[0])
- continue;
- mvSourceFiles.push_back(buf);
- }
-
- fInput.close();
-}