| /************************************************************** |
| * |
| * 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 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| |
| // MARKER(update_precomp.py): autogen include statement, do not remove |
| #include "precompiled_l10ntools.hxx" |
| #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 |
| #define STATE_SDFFILE 0x0006 |
| #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; |
| sal_Bool bEnableExport; |
| sal_Bool bMergeMode; |
| sal_Bool bErrorLog; |
| sal_Bool bUTF8; |
| ByteString sPrj; |
| ByteString sPrjRoot; |
| ByteString sOutputFile; |
| ByteString sOutputFileX; |
| ByteString sOutputFileY; |
| ByteString sSDFFile; |
| |
| /*****************************************************************************/ |
| sal_Bool ParseCommandLine( int argc, char* argv[]) |
| /*****************************************************************************/ |
| { |
| bEnableExport = sal_False; |
| bMergeMode = sal_False; |
| bErrorLog = sal_True; |
| bUTF8 = sal_True; |
| sPrj = ""; |
| sPrjRoot = ""; |
| Export::sLanguages = ""; |
| Export::sForcedLanguages = ""; |
| |
| sal_uInt16 nState = STATE_NON; |
| sal_Bool bInput = sal_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" ) { |
| nState = STATE_SDFFILE; // next token specifies the merge database |
| } |
| else if ( ByteString( argv[ i ]).ToUpperAscii() == "-E" ) { |
| nState = STATE_ERRORLOG; |
| bErrorLog = sal_False; |
| } |
| else if ( ByteString( argv[ i ]).ToUpperAscii() == "-UTF8" ) { |
| nState = STATE_UTF8; |
| bUTF8 = sal_True; |
| } |
| else if ( ByteString( argv[ i ]).ToUpperAscii() == "-NOUTF8" ) { |
| nState = STATE_UTF8; |
| bUTF8 = sal_False; |
| } |
| else if ( ByteString( argv[ i ]).ToUpperAscii() == "-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 ]; |
| // sPrj.ToLowerAscii(); // the project |
| } |
| 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, " 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(OS2) |
| int main( int argc, char *argv[] ) |
| #else |
| int _cdecl main( int argc, char *argv[] ) |
| #endif |
| /*****************************************************************************/ |
| { |
| |
| if ( !ParseCommandLine( argc, argv )) { |
| Help(); |
| return 1; |
| } |
| //sal_uInt32 startfull = Export::startMessure(); |
| |
| bool hasInputList = sInputFile.GetBuffer()[0]=='@'; |
| // printf("x = %s , y = %s , o = %s\n", sOutputFileX.GetBuffer(), sOutputFileY.GetBuffer() , sOutputFile.GetBuffer() ); |
| bool hasNoError = true; |
| |
| if ( sOutputFile.Len() ){ // Merge single file ? |
| //printf("DBG: Inputfile = %s\n",sInputFile.GetBuffer()); |
| HelpParser aParser( sInputFile, bUTF8 , false ); |
| |
| if ( bMergeMode ) |
| { |
| |
| //sal_uInt64 startreadloc = Export::startMessure(); |
| MergeDataFile aMergeDataFile( sSDFFile, sInputFile , sal_False, RTL_TEXTENCODING_MS_1252 ); |
| //MergeDataFile aMergeDataFile( sSDFFile, sInputFile , sal_False, RTL_TEXTENCODING_MS_1252, false ); |
| //Export::stopMessure( ByteString("read localize.sdf") , startreadloc ); |
| |
| hasNoError = aParser.Merge( sSDFFile, sOutputFile , Export::sLanguages , aMergeDataFile ); |
| } |
| else |
| hasNoError = aParser.CreateSDF( sOutputFile, sPrj, sPrjRoot, sInputFile, new XMLFile( '0' ), "help" ); |
| }else if ( sOutputFileX.Len() && sOutputFileY.Len() && hasInputList ) { // Merge multiple files ? |
| if ( bMergeMode ){ |
| |
| 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 |
| //MergeDataFile aMergeDataFile( sSDFFile, sHelpFile , sal_False, RTL_TEXTENCODING_MS_1252, false ); |
| MergeDataFile aMergeDataFile( sSDFFile, sHelpFile , sal_False, RTL_TEXTENCODING_MS_1252 ); |
| |
| //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"; |
| |
| //Export::stopMessure( ByteString("full cycle") , startfull ); |
| if( hasNoError ) |
| return 0; |
| else |
| return 1; |
| } |
| #endif |