diff options
Diffstat (limited to 'l10ntools/source/helpex.cxx')
-rw-r--r-- | l10ntools/source/helpex.cxx | 261 |
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; |