2004-08-30 16:30:39 +00:00
|
|
|
/*************************************************************************
|
|
|
|
*
|
2005-09-09 14:00:23 +00:00
|
|
|
* OpenOffice.org - a multi-platform office productivity suite
|
2004-08-30 16:30:39 +00:00
|
|
|
*
|
2005-09-09 14:00:23 +00:00
|
|
|
* $RCSfile: helpex.cxx,v $
|
2004-08-30 16:30:39 +00:00
|
|
|
*
|
2006-08-14 16:10:14 +00:00
|
|
|
* $Revision: 1.9 $
|
2004-08-30 16:30:39 +00:00
|
|
|
*
|
2006-08-14 16:10:14 +00:00
|
|
|
* last change: $Author: hr $ $Date: 2006-08-14 17:10:14 $
|
2004-08-30 16:30:39 +00:00
|
|
|
*
|
2005-09-09 14:00:23 +00:00
|
|
|
* The Contents of this file are made available subject to
|
|
|
|
* the terms of GNU Lesser General Public License Version 2.1.
|
2004-08-30 16:30:39 +00:00
|
|
|
*
|
|
|
|
*
|
2005-09-09 14:00:23 +00:00
|
|
|
* GNU Lesser General Public License Version 2.1
|
|
|
|
* =============================================
|
|
|
|
* Copyright 2005 by Sun Microsystems, Inc.
|
|
|
|
* 901 San Antonio Road, Palo Alto, CA 94303, USA
|
2004-08-30 16:30:39 +00:00
|
|
|
*
|
2005-09-09 14:00:23 +00:00
|
|
|
* This library is free software; you can redistribute it and/or
|
|
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
|
|
* License version 2.1, as published by the Free Software Foundation.
|
2004-08-30 16:30:39 +00:00
|
|
|
*
|
2005-09-09 14:00:23 +00:00
|
|
|
* This library is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
* Lesser General Public License for more details.
|
2004-08-30 16:30:39 +00:00
|
|
|
*
|
2005-09-09 14:00:23 +00:00
|
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
|
|
* License along with this library; if not, write to the Free Software
|
|
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
|
|
|
* MA 02111-1307 USA
|
2004-08-30 16:30:39 +00:00
|
|
|
*
|
|
|
|
************************************************************************/
|
|
|
|
#include <stdio.h>
|
|
|
|
#include <stdlib.h>
|
|
|
|
|
|
|
|
// local includes
|
|
|
|
#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
|
2006-03-29 12:26:46 +00:00
|
|
|
#define STATE_SDFFILE 0x0006
|
2004-08-30 16:30:39 +00:00
|
|
|
#define STATE_ERRORLOG 0x0007
|
|
|
|
#define STATE_BREAKHELP 0x0008
|
|
|
|
#define STATE_UNMERGE 0x0009
|
|
|
|
#define STATE_UTF8 0x000A
|
|
|
|
#define STATE_LANGUAGES 0x000B
|
|
|
|
#define STATE_FORCE_LANGUAGES 0x000C
|
|
|
|
#define STATE_OUTPUTX 0xfe
|
|
|
|
#define STATE_OUTPUTY 0xff
|
|
|
|
|
|
|
|
// set of global variables
|
|
|
|
ByteString sInputFile;
|
|
|
|
BOOL bEnableExport;
|
|
|
|
BOOL bMergeMode;
|
|
|
|
BOOL bErrorLog;
|
|
|
|
BOOL bUTF8;
|
|
|
|
ByteString sPrj;
|
|
|
|
ByteString sPrjRoot;
|
|
|
|
ByteString sOutputFile;
|
|
|
|
ByteString sOutputFileX;
|
|
|
|
ByteString sOutputFileY;
|
2006-03-29 12:26:46 +00:00
|
|
|
ByteString sSDFFile;
|
2004-11-02 15:04:30 +00:00
|
|
|
bool bQuiet;
|
2004-08-30 16:30:39 +00:00
|
|
|
|
|
|
|
/*****************************************************************************/
|
|
|
|
BOOL ParseCommandLine( int argc, char* argv[])
|
|
|
|
/*****************************************************************************/
|
|
|
|
{
|
|
|
|
bEnableExport = FALSE;
|
|
|
|
bMergeMode = FALSE;
|
|
|
|
bErrorLog = TRUE;
|
|
|
|
bUTF8 = TRUE;
|
|
|
|
sPrj = "";
|
|
|
|
sPrjRoot = "";
|
2004-11-02 15:04:30 +00:00
|
|
|
bQuiet = false;
|
2004-08-30 16:30:39 +00:00
|
|
|
Export::sLanguages = "";
|
|
|
|
Export::sForcedLanguages = "";
|
|
|
|
|
|
|
|
USHORT nState = STATE_NON;
|
|
|
|
BOOL bInput = FALSE;
|
|
|
|
|
|
|
|
// parse command line
|
|
|
|
for( int i = 1; i < argc; i++ ) {
|
|
|
|
if ( ByteString( argv[ i ]).ToUpperAscii() == "-I" ) {
|
|
|
|
nState = STATE_INPUT; // next tokens specifies source files
|
|
|
|
}
|
|
|
|
else if ( ByteString( argv[ i ]).ToUpperAscii() == "-O" ) {
|
|
|
|
nState = STATE_OUTPUT; // next token specifies the dest file
|
|
|
|
}
|
|
|
|
else if ( ByteString( argv[ i ]).ToUpperAscii() == "-X" ) {
|
|
|
|
nState = STATE_OUTPUTX; // next token specifies the dest file
|
|
|
|
}
|
|
|
|
else if ( ByteString( argv[ i ]).ToUpperAscii() == "-Y" ) {
|
|
|
|
nState = STATE_OUTPUTY; // next token specifies the dest file
|
|
|
|
}
|
|
|
|
else if ( ByteString( argv[ i ]).ToUpperAscii() == "-P" ) {
|
|
|
|
nState = STATE_PRJ; // next token specifies the cur. project
|
|
|
|
}
|
|
|
|
else if ( ByteString( argv[ i ]).ToUpperAscii() == "-LF" ) {
|
|
|
|
nState = STATE_FORCE_LANGUAGES;
|
|
|
|
}
|
|
|
|
|
|
|
|
else if ( ByteString( argv[ i ]).ToUpperAscii() == "-R" ) {
|
|
|
|
nState = STATE_ROOT; // next token specifies path to project root
|
|
|
|
}
|
|
|
|
else if ( ByteString( argv[ i ]).ToUpperAscii() == "-M" ) {
|
2006-03-29 12:26:46 +00:00
|
|
|
nState = STATE_SDFFILE; // next token specifies the merge database
|
2004-08-30 16:30:39 +00:00
|
|
|
}
|
|
|
|
else if ( ByteString( argv[ i ]).ToUpperAscii() == "-E" ) {
|
|
|
|
nState = STATE_ERRORLOG;
|
|
|
|
bErrorLog = FALSE;
|
|
|
|
}
|
2004-11-02 15:04:30 +00:00
|
|
|
else if ( ByteString( argv[ i ] ).ToUpperAscii() == "-QQ" ) {
|
|
|
|
bQuiet = true;
|
|
|
|
}
|
2004-08-30 16:30:39 +00:00
|
|
|
else if ( ByteString( argv[ i ]).ToUpperAscii() == "-UTF8" ) {
|
|
|
|
nState = STATE_UTF8;
|
|
|
|
bUTF8 = TRUE;
|
|
|
|
}
|
|
|
|
else if ( ByteString( argv[ i ]).ToUpperAscii() == "-NOUTF8" ) {
|
|
|
|
nState = STATE_UTF8;
|
|
|
|
bUTF8 = FALSE;
|
|
|
|
}
|
|
|
|
else if ( ByteString( argv[ i ]).ToUpperAscii() == "-L" ) {
|
|
|
|
nState = STATE_LANGUAGES;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
switch ( nState ) {
|
|
|
|
case STATE_NON: {
|
|
|
|
return FALSE; // no valid command line
|
|
|
|
}
|
2006-06-19 16:22:35 +00:00
|
|
|
//break;
|
2004-08-30 16:30:39 +00:00
|
|
|
case STATE_INPUT: {
|
|
|
|
sInputFile = argv[ i ];
|
|
|
|
bInput = TRUE; // source file found
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case STATE_OUTPUT: {
|
|
|
|
sOutputFile = argv[ i ]; // the dest. file
|
|
|
|
}
|
2006-03-29 12:26:46 +00:00
|
|
|
break;
|
2004-08-30 16:30:39 +00:00
|
|
|
case STATE_OUTPUTX: {
|
|
|
|
sOutputFileX = argv[ i ]; // the dest. file
|
|
|
|
}
|
2006-03-29 12:26:46 +00:00
|
|
|
break;
|
2004-08-30 16:30:39 +00:00
|
|
|
case STATE_OUTPUTY: {
|
|
|
|
sOutputFileY = argv[ i ]; // the dest. file
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case STATE_PRJ: {
|
|
|
|
sPrj = argv[ i ];
|
|
|
|
// sPrj.ToLowerAscii(); // the project
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case STATE_ROOT: {
|
|
|
|
sPrjRoot = argv[ i ]; // path to project root
|
|
|
|
}
|
|
|
|
break;
|
2006-03-29 12:26:46 +00:00
|
|
|
case STATE_SDFFILE: {
|
|
|
|
sSDFFile = argv[ i ];
|
2004-08-30 16:30:39 +00:00
|
|
|
bMergeMode = 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 = TRUE;
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
// command line is not valid
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/*****************************************************************************/
|
|
|
|
void Help()
|
|
|
|
/*****************************************************************************/
|
|
|
|
{
|
2005-01-13 18:17:05 +00:00
|
|
|
fprintf( stdout, "Syntax: HELPEX[-p Prj][-r PrjRoot]-i FileIn ( -o FileOut | -x path -y relfile )[-m DataBase][-e][-b][-u][-L l1,l2,...][-QQ] -LF l1,l2 \n" );
|
2004-08-30 16:30:39 +00:00
|
|
|
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" );
|
2005-01-13 18:17:05 +00:00
|
|
|
fprintf( stdout, " -QQ: quiet output\n" );
|
2004-08-30 16:30:39 +00:00
|
|
|
fprintf( stdout, " -L: Restrict the handled languages. l1,l2,... are elements of (en-US,fr,de...)\n" );
|
|
|
|
fprintf( stdout, " A fallback language can be defined like this: l1=f1.\n" );
|
|
|
|
fprintf( stdout, " f1, f2,... are also elements of (en-US,fr,de...)\n" );
|
|
|
|
fprintf( stdout, " Example: -L fr=en-US\n" );
|
|
|
|
fprintf( stdout, " Restriction to fr, en-US will be fallback for fr\n" );
|
|
|
|
fprintf( stdout, " -LF: Force the creation of that languages\n" );
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/*****************************************************************************/
|
|
|
|
#ifndef TESTDRIVER
|
|
|
|
|
|
|
|
#if defined( UNX ) || defined( MAC )
|
|
|
|
int main( int argc, char *argv[] )
|
|
|
|
#else
|
|
|
|
int _cdecl main( int argc, char *argv[] )
|
|
|
|
#endif
|
|
|
|
/*****************************************************************************/
|
|
|
|
{
|
|
|
|
if ( !ParseCommandLine( argc, argv )) {
|
|
|
|
Help();
|
|
|
|
return 1;
|
|
|
|
}
|
2006-03-29 12:26:46 +00:00
|
|
|
//sal_uInt32 startfull = Export::startMessure();
|
2004-08-30 16:30:39 +00:00
|
|
|
|
2006-03-29 12:26:46 +00:00
|
|
|
bool hasInputList = sInputFile.GetBuffer()[0]=='@';
|
|
|
|
// printf("x = %s , y = %s , o = %s\n", sOutputFileX.GetBuffer(), sOutputFileY.GetBuffer() , sOutputFile.GetBuffer() );
|
2005-10-25 10:42:05 +00:00
|
|
|
bool hasNoError = true;
|
|
|
|
|
2006-03-29 12:26:46 +00:00
|
|
|
if ( sOutputFile.Len() ){ // Merge single file ?
|
|
|
|
//printf("DBG: Inputfile = %s\n",sInputFile.GetBuffer());
|
|
|
|
HelpParser aParser( sInputFile, bUTF8 , false );
|
|
|
|
|
2004-08-30 16:30:39 +00:00
|
|
|
if ( bMergeMode )
|
2006-03-29 12:26:46 +00:00
|
|
|
{
|
|
|
|
|
|
|
|
//sal_uInt64 startreadloc = Export::startMessure();
|
2006-06-19 16:22:35 +00:00
|
|
|
MergeDataFile aMergeDataFile( sSDFFile, sInputFile , FALSE, RTL_TEXTENCODING_MS_1252 );
|
|
|
|
//MergeDataFile aMergeDataFile( sSDFFile, sInputFile , FALSE, RTL_TEXTENCODING_MS_1252, false );
|
2006-03-29 12:26:46 +00:00
|
|
|
//Export::stopMessure( ByteString("read localize.sdf") , startreadloc );
|
|
|
|
|
|
|
|
hasNoError = aParser.Merge( sSDFFile, sOutputFile , Export::sLanguages , aMergeDataFile );
|
|
|
|
}
|
2004-08-30 16:30:39 +00:00
|
|
|
else
|
2005-10-25 10:42:05 +00:00
|
|
|
hasNoError = aParser.CreateSDF( sOutputFile, sPrj, sPrjRoot );
|
2006-03-29 12:26:46 +00:00
|
|
|
}else if ( sOutputFileX.Len() && sOutputFileY.Len() && hasInputList ) { // Merge multiple files ?
|
|
|
|
if ( bMergeMode ){
|
2004-08-30 16:30:39 +00:00
|
|
|
|
2006-03-29 12:26:46 +00:00
|
|
|
ifstream aFStream( sInputFile.Copy( 1 , sInputFile.Len() ).GetBuffer() , ios::in );
|
|
|
|
|
|
|
|
if( !aFStream ){
|
|
|
|
cerr << "ERROR: - helpex - Can't open the file " << sInputFile.Copy( 1 , sInputFile.Len() ).GetBuffer() << "\n";
|
|
|
|
exit(-1);
|
|
|
|
}
|
|
|
|
|
|
|
|
vector<ByteString> filelist;
|
|
|
|
rtl::OStringBuffer filename;
|
|
|
|
sal_Char aChar;
|
|
|
|
while( aFStream.get( aChar ) )
|
|
|
|
{
|
|
|
|
if( aChar == ' ' || aChar == '\n')
|
|
|
|
filelist.push_back( ByteString( filename.makeStringAndClear().getStr() ) );
|
|
|
|
else
|
|
|
|
filename.append( aChar );
|
|
|
|
}
|
|
|
|
if( filename.getLength() > 0 )
|
|
|
|
filelist.push_back( ByteString ( filename.makeStringAndClear().getStr() ) );
|
|
|
|
|
|
|
|
aFStream.close();
|
|
|
|
ByteString sHelpFile(""); // dummy
|
2006-06-19 16:22:35 +00:00
|
|
|
//MergeDataFile aMergeDataFile( sSDFFile, sHelpFile , FALSE, RTL_TEXTENCODING_MS_1252, false );
|
|
|
|
MergeDataFile aMergeDataFile( sSDFFile, sHelpFile , FALSE, RTL_TEXTENCODING_MS_1252 );
|
|
|
|
|
2006-03-29 12:26:46 +00:00
|
|
|
//aMergeDataFile.Dump();
|
|
|
|
std::vector<ByteString> aLanguages;
|
|
|
|
HelpParser::parse_languages( aLanguages , aMergeDataFile );
|
|
|
|
|
|
|
|
bool bCreateDir = true;
|
|
|
|
for( vector<ByteString>::iterator pos = filelist.begin() ; pos != filelist.end() ; ++pos )
|
|
|
|
{
|
|
|
|
sHelpFile = *pos;
|
|
|
|
cout << ".";cout.flush();
|
|
|
|
|
|
|
|
HelpParser aParser( sHelpFile , bUTF8 , true );
|
|
|
|
hasNoError = aParser.Merge( sSDFFile , sOutputFileX , sOutputFileY , true , aLanguages , aMergeDataFile , bCreateDir );
|
|
|
|
bCreateDir = false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else
|
|
|
|
cerr << "helpex ERROR: Wrong input parameters!\n";
|
2004-08-30 16:30:39 +00:00
|
|
|
|
2006-03-29 12:26:46 +00:00
|
|
|
//Export::stopMessure( ByteString("full cycle") , startfull );
|
2005-10-25 10:42:05 +00:00
|
|
|
if( hasNoError )
|
|
|
|
return 0;
|
|
|
|
else
|
|
|
|
return 1;
|
2004-08-30 16:30:39 +00:00
|
|
|
}
|
|
|
|
#endif
|