summaryrefslogtreecommitdiff
path: root/l10ntools/source/helpex.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'l10ntools/source/helpex.cxx')
-rw-r--r--l10ntools/source/helpex.cxx261
1 files changed, 72 insertions, 189 deletions
diff --git a/l10ntools/source/helpex.cxx b/l10ntools/source/helpex.cxx
index 470b4f1383bc..7ab581a2a1d6 100644
--- a/l10ntools/source/helpex.cxx
+++ b/l10ntools/source/helpex.cxx
@@ -20,6 +20,9 @@
#include "sal/config.h"
#include <iostream>
+#include <fstream>
+#include <string>
+#include <cstring>
#include <stdio.h>
#include <stdlib.h>
@@ -28,214 +31,94 @@
#include "helpmerge.hxx"
-// defines to parse command line
-#define STATE_NON 0x0001
-#define STATE_INPUT 0x0002
-#define STATE_OUTPUT 0x0003
-#define STATE_PRJ 0x0004
-#define STATE_ROOT 0x0005
-#define STATE_SDFFILE 0x0006
-#define STATE_ERRORLOG 0x0007
-#define STATE_BREAKHELP 0x0008
-#define STATE_UNMERGE 0x0009
-#define STATE_LANGUAGES 0x000A
-#define STATE_FORCE_LANGUAGES 0x000B
-#define STATE_OUTPUTX 0xfe
-#define STATE_OUTPUTY 0xff
-
-// set of global variables
-rtl::OString sInputFile;
-sal_Bool bEnableExport;
-sal_Bool bMergeMode;
-rtl::OString sPrj;
-rtl::OString sPrjRoot;
-rtl::OString sOutputFile;
-rtl::OString sOutputFileX;
-rtl::OString sOutputFileY;
-rtl::OString sSDFFile;
+#ifndef TESTDRIVER
-/*****************************************************************************/
-sal_Bool ParseCommandLine( int argc, char* argv[])
-/*****************************************************************************/
+void WriteUsage()
{
- bEnableExport = sal_False;
- bMergeMode = sal_False;
- sPrj = "";
- sPrjRoot = "";
- Export::sLanguages = "";
- Export::sForcedLanguages = "";
+ std::cout
+ << "Syntax: Helpex [-p Prj] [-r Root] -[m]i FileIn -o FileOut"
+ << " [-m DataBase] [-l l1,l2,...]\n"
+ << " Prj: Project\n"
+ << " Root: Path to project root (../.. etc.)\n"
+ << " FileIn + i: Source file (*.xhp)\n"
+ << " FileIn + -mi: File including pathes of source files"
+ << " (only for merge)"
+ << " FileOut: Destination file (*.*) or files (in case of -mi)\n"
+ << " DataBase: Mergedata (*.po)\n"
+ << " -l: Restrict the handled languages; l1, l2, ... are elements of"
+ << " (de, en-US, ...)\n";
+}
- sal_uInt16 nState = STATE_NON;
- sal_Bool bInput = sal_False;
+SAL_IMPLEMENT_MAIN_WITH_ARGS(argc, argv) {
- // parse command line
- for( int i = 1; i < argc; i++ )
+ bool bMultiMerge = false;
+ for (int nIndex = 1; nIndex != argc; ++nIndex)
{
- rtl::OString aArg = rtl::OString(argv[i]).toAsciiUpperCase();
- if (aArg.equalsL(RTL_CONSTASCII_STRINGPARAM("-I")))
- nState = STATE_INPUT; // next tokens specifies source files
- else if (aArg.equalsL(RTL_CONSTASCII_STRINGPARAM("-O")))
- nState = STATE_OUTPUT; // next token specifies the dest file
- else if (aArg.equalsL(RTL_CONSTASCII_STRINGPARAM("-X")))
- nState = STATE_OUTPUTX; // next token specifies the dest file
- else if (aArg.equalsL(RTL_CONSTASCII_STRINGPARAM("-Y" )))
- nState = STATE_OUTPUTY; // next token specifies the dest file
- else if (aArg.equalsL(RTL_CONSTASCII_STRINGPARAM("-P" )))
- nState = STATE_PRJ; // next token specifies the cur. project
- else if (aArg.equalsL(RTL_CONSTASCII_STRINGPARAM("-LF")))
- nState = STATE_FORCE_LANGUAGES;
- else if (aArg.equalsL(RTL_CONSTASCII_STRINGPARAM("-R" )))
- nState = STATE_ROOT; // next token specifies path to project root
- else if (aArg.equalsL(RTL_CONSTASCII_STRINGPARAM("-M" )))
- nState = STATE_SDFFILE; // next token specifies the merge database
- else if (aArg.equalsL(RTL_CONSTASCII_STRINGPARAM("-E" )))
+ if (std::strcmp(argv[nIndex], "-mi") == 0)
{
- nState = STATE_ERRORLOG;
+ argv[nIndex][1] = 'i';
+ argv[nIndex][2] = '\0';
+ bMultiMerge = true;
+ break;
}
- else if (aArg.equalsL(RTL_CONSTASCII_STRINGPARAM("-L" )))
- nState = STATE_LANGUAGES;
- else
- {
- switch ( nState )
- {
- case STATE_NON: {
- return sal_False; // no valid command line
- }
- //break;
- case STATE_INPUT: {
- sInputFile = argv[ i ];
- bInput = sal_True; // source file found
- }
- break;
- case STATE_OUTPUT: {
- sOutputFile = argv[ i ]; // the dest. file
- }
- break;
- case STATE_OUTPUTX: {
- sOutputFileX = argv[ i ]; // the dest. file
- }
- break;
- case STATE_OUTPUTY: {
- sOutputFileY = argv[ i ]; // the dest. file
- }
- break;
- case STATE_PRJ: {
- sPrj = argv[ i ];
- }
- break;
- case STATE_ROOT: {
- sPrjRoot = argv[ i ]; // path to project root
- }
- break;
- case STATE_SDFFILE: {
- sSDFFile = argv[ i ];
- bMergeMode = sal_True; // activate merge mode, cause merge database found
- }
- break;
- case STATE_LANGUAGES: {
- Export::sLanguages = argv[ i ];
- }
- case STATE_FORCE_LANGUAGES:{
- Export::sForcedLanguages = argv[ i ];
- }
- break;
- }
- }
- }
-
- if ( bInput ) {
- // command line is valid
- bEnableExport = sal_True;
- return sal_True;
}
- // command line is not valid
- return sal_False;
-}
-
-
-/*****************************************************************************/
-void Help()
-/*****************************************************************************/
-{
- fprintf( stdout, "Syntax: HELPEX[-p Prj][-r PrjRoot]-i FileIn ( -o FileOut | -x path -y relfile )[-m DataBase][-e][-b][-u][-L l1,l2,...] -LF l1,l2 \n" );
- fprintf( stdout, " Prj: Project\n" );
- fprintf( stdout, " PrjRoot: Path to project root (..\\.. etc.)\n" );
- fprintf( stdout, " FileIn: Source file (*.lng)\n" );
- fprintf( stdout, " FileOut: Destination file (*.*)\n" );
- fprintf( stdout, " DataBase: Mergedata (*.sdf)\n" );
- fprintf( stdout, " -L: Restrict the handled languages. l1,l2,... are elements of (en-US,fr,de...)\n" );
- fprintf( stdout, " -LF: Force the creation of that languages\n" );
-
-}
-
-/*****************************************************************************/
-#ifndef TESTDRIVER
-
-SAL_IMPLEMENT_MAIN_WITH_ARGS(argc, argv) {
- if ( !ParseCommandLine( argc, argv )) {
- Help();
+ HandledArgs aArgs;
+ if ( !Export::handleArguments( argc, argv, aArgs) )
+ {
+ WriteUsage();
return 1;
}
- //sal_uInt32 startfull = Export::startMessure();
-
- bool hasInputList = sInputFile[0]=='@';
bool hasNoError = true;
- if ( sOutputFile.getLength() ){ // Merge single file ?
- HelpParser aParser( sInputFile );
-
- if ( bMergeMode )
+ if ( aArgs.m_bMergeMode )
+ {
+ if( bMultiMerge )
{
- //sal_uInt64 startreadloc = Export::startMessure();
- MergeDataFile aMergeDataFile(sSDFFile, sInputFile, false);
-
- hasNoError = aParser.Merge( sSDFFile, sOutputFile , Export::sLanguages , aMergeDataFile );
- }
- else
- hasNoError = aParser.CreateSDF( sOutputFile, sPrj, sPrjRoot, sInputFile, new XMLFile( rtl::OUString('0') ), "help" );
- }else if ( sOutputFileX.getLength() && sOutputFileY.getLength() && hasInputList ) { // Merge multiple files ?
- if ( bMergeMode ){
-
- ifstream aFStream( sInputFile.copy( 1 ).getStr() , ios::in );
-
- if( !aFStream ){
- std::cerr << "ERROR: - helpex - Can't open the file " << sInputFile.copy( 1 ).getStr() << "\n";
- std::exit(EXIT_FAILURE);
- }
-
- vector<rtl::OString> filelist;
- rtl::OStringBuffer filename;
- sal_Char aChar;
- while( aFStream.get( aChar ) )
+ std::ifstream aInput( aArgs.m_sInputFile.getStr() );
+ if( !aInput.is_open() )
{
- if( aChar == ' ' || aChar == '\n')
- filelist.push_back(filename.makeStringAndClear());
- else
- filename.append( aChar );
+ std::cerr << "Helpex error: cannot open input file\n";
+ return 1;
}
- if( filename.getLength() > 0 )
- filelist.push_back(filename.makeStringAndClear());
-
- aFStream.close();
- rtl::OString sHelpFile; // dummy
- MergeDataFile aMergeDataFile( sSDFFile, sHelpFile, false );
-
- std::vector<rtl::OString> aLanguages;
- HelpParser::parse_languages( aLanguages , aMergeDataFile );
-
- bool bCreateDir = true;
- for( vector<rtl::OString>::iterator pos = filelist.begin() ; pos != filelist.end() ; ++pos )
+ MergeDataFile aMergeDataFile( aArgs.m_sMergeSrc, OString(), false);
+ std::string sTemp;
+ aInput >> sTemp;
+ while( !aInput.eof() )
{
- sHelpFile = *pos;
-
- HelpParser aParser( sHelpFile );
- hasNoError = aParser.Merge( sSDFFile , sOutputFileX , sOutputFileY , true , aLanguages , aMergeDataFile , bCreateDir );
- bCreateDir = false;
+ const OString sXhpFile( sTemp.data(), sTemp.length() );
+ HelpParser aParser( sXhpFile );
+ const OString sOutput(
+ aArgs.m_sOutputFile +
+ sXhpFile.copy( sXhpFile.lastIndexOf("/") ));
+ if( !aParser.Merge( aArgs.m_sMergeSrc, sOutput,
+ Export::sLanguages, aMergeDataFile ))
+ {
+ hasNoError = false;
+ }
+ aInput >> sTemp;
}
+ aInput.close();
}
- } else
- std::cerr << "helpex ERROR: Wrong input parameters!\n";
+ else
+ {
+ HelpParser aParser( aArgs.m_sInputFile );
+ MergeDataFile aMergeDataFile(
+ aArgs.m_sMergeSrc, aArgs.m_sInputFile, false );
+ hasNoError =
+ aParser.Merge(
+ aArgs.m_sMergeSrc, aArgs.m_sOutputFile,
+ Export::sLanguages , aMergeDataFile );
+ }
+ }
+ else
+ {
+ HelpParser aParser( aArgs.m_sInputFile );
+ hasNoError =
+ aParser.CreateSDF(
+ aArgs.m_sOutputFile, aArgs.m_sPrj, aArgs.m_sPrjRoot,
+ aArgs.m_sInputFile, new XMLFile( OUString('0') ), "help" );
+ }
if( hasNoError )
return 0;