You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
pytqt/pylupdate3/main.cpp

156 lines
5.0 KiB

/**********************************************************************
** Copyright (C) 2002 Detlev Offenbach <detlev@die-offenbachs.de>
**
** This is a modified version of lupdate. The original is part of TQt-Linguist.
** The copyright of the original file can be found below.
**
** This version is modified to handle python sources.
**
** The file is provided AS IS with NO WARRANTY OF ANY KIND,
** INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR
** A PARTICULAR PURPOSE.
**
**********************************************************************/
/**********************************************************************
** Copyright (C) 2000 Trolltech AS. All rights reserved.
**
** main.cpp
**
** This file is part of TQt Linguist.
**
** See the file LICENSE included in the distribution for the usage
** and distribution terms.
**
** The file is provided AS IS with NO WARRANTY OF ANY KIND,
** INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR
** A PARTICULAR PURPOSE.
**
**********************************************************************/
#include <tqfile.h>
#include <tqstring.h>
#include <tqstringlist.h>
#include <tqtextstream.h>
#include <errno.h>
#include <metatranslator.h>
#include <proparser.h>
#include <string.h>
// defined in fetchtr.cpp
extern void fetchtr_py( const char *fileName, MetaTranslator *tor,
const char *defaultContext, bool mustExist );
// defined in merge.cpp
extern void merge( MetaTranslator *tor, const MetaTranslator *virginTor,
bool verbose );
typedef TQValueList<MetaTranslatorMessage> TML;
static void printUsage()
{
tqWarning( "Usage: pylupdate [options] file.pro...\n"
"Options:\n"
" -help Display this information and exits\n"
" -noobsolete\n"
" Drop all obsolete strings\n"
" -verbose\n"
" Explain what is being done\n"
" -version\n"
" Display the version of pylupdate and exits" );
}
int main( int argc, char **argv )
{
bool verbose = FALSE;
bool noObsolete = FALSE;
bool metSomething = FALSE;
int numProFiles = 0;
for ( int i = 1; i < argc; i++ ) {
if ( qstrcmp(argv[i], "-help") == 0 ) {
printUsage();
return 0;
} else if ( qstrcmp(argv[i], "-noobsolete") == 0 ) {
noObsolete = TRUE;
continue;
} else if ( qstrcmp(argv[i], "-verbose") == 0 ) {
verbose = TRUE;
continue;
} else if ( qstrcmp(argv[i], "-version") == 0 ) {
tqWarning( "pylupdate version %s", TQT_VERSION_STR );
return 0;
}
numProFiles++;
TQFile f( argv[i] );
if ( !f.open(IO_ReadOnly) ) {
tqWarning( "pylupdate error: Cannot open project file '%s': %s",
argv[i], strerror(errno) );
return 1;
}
TQTextStream t( &f );
TQString fullText = t.read();
f.close();
MetaTranslator fetchedTor;
TQString defaultContext = "@default";
TQCString codec;
TQStringList translatorFiles;
TQStringList::Iterator tf;
TQMap<TQString, TQString> tagMap = proFileTagMap( fullText );
TQMap<TQString, TQString>::Iterator it;
for ( it = tagMap.begin(); it != tagMap.end(); ++it ) {
TQStringList toks = TQStringList::split( TQChar(' '), it.data() );
TQStringList::Iterator t;
for ( t = toks.begin(); t != toks.end(); ++t ) {
if ( it.key() == TQString("SOURCES") ) {
fetchtr_py( *t, &fetchedTor,
defaultContext, TRUE );
metSomething = TRUE;
} else if ( it.key() == TQString("TRANSLATIONS") ) {
translatorFiles.append( *t );
metSomething = TRUE;
} else if ( it.key() == TQString("CODEC") ) {
codec = (*t).latin1();
}
}
}
for ( tf = translatorFiles.begin(); tf != translatorFiles.end(); ++tf ) {
MetaTranslator tor;
tor.load( *tf );
if ( !codec.isEmpty() )
tor.setCodec( codec );
if ( verbose )
tqWarning( "Updating '%s'...", (*tf).latin1() );
merge( &tor, &fetchedTor, verbose );
if ( noObsolete )
tor.stripObsoleteMessages();
tor.stripEmptyContexts();
if ( !tor.save(*tf) )
tqWarning( "pylupdate error: Cannot save '%s': %s", (*tf).latin1(),
strerror(errno) );
}
if ( !metSomething ) {
tqWarning( "pylupdate warning: File '%s' does not look like a project"
" file", argv[i] );
} else if ( translatorFiles.isEmpty() ) {
tqWarning( "pylupdate warning: Met no 'TRANSLATIONS' entry in project"
" file '%s'", argv[i] );
}
}
if ( numProFiles == 0 ) {
printUsage();
return 1;
}
return 0;
}