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.
111 lines
3.2 KiB
111 lines
3.2 KiB
13 years ago
|
/**********************************************************************
|
||
|
** Copyright (C) 2000 Trolltech AS. All rights reserved.
|
||
|
**
|
||
|
** merge.cpp
|
||
|
**
|
||
13 years ago
|
** This file is part of TQt Linguist.
|
||
13 years ago
|
**
|
||
|
** 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 <metatranslator.h>
|
||
|
|
||
|
// defined in numberh.cpp
|
||
|
extern void applyNumberHeuristic( MetaTranslator *tor, bool verbose );
|
||
|
// defined in sametexth.cpp
|
||
|
extern void applySameTextHeuristic( MetaTranslator *tor, bool verbose );
|
||
|
|
||
13 years ago
|
typedef TQValueList<MetaTranslatorMessage> TML;
|
||
13 years ago
|
|
||
|
/*
|
||
|
Merges two MetaTranslator objects into the first one. The first one is a set
|
||
|
of source texts and translations for a previous version of the
|
||
|
internationalized program; the second one is a set of fresh source text newly
|
||
|
extracted from the source code, without any translation yet.
|
||
|
*/
|
||
|
|
||
|
void merge( MetaTranslator *tor, const MetaTranslator *virginTor, bool verbose )
|
||
|
{
|
||
|
int known = 0;
|
||
|
int neww = 0;
|
||
|
int obsoleted = 0;
|
||
|
TML all = tor->messages();
|
||
|
TML::Iterator it;
|
||
|
|
||
|
/*
|
||
|
The types of all the messages from the vernacular translator are updated
|
||
|
according to the virgin translator.
|
||
|
*/
|
||
|
for ( it = all.begin(); it != all.end(); ++it ) {
|
||
|
MetaTranslatorMessage::Type newType = MetaTranslatorMessage::Unfinished;
|
||
|
MetaTranslatorMessage m = *it;
|
||
|
|
||
|
// skip context comment
|
||
13 years ago
|
if ( !TQCString((*it).sourceText()).isEmpty() ) {
|
||
13 years ago
|
if ( !virginTor->contains((*it).context(), (*it).sourceText(),
|
||
|
(*it).comment()) ) {
|
||
|
newType = MetaTranslatorMessage::Obsolete;
|
||
|
if ( m.type() != MetaTranslatorMessage::Obsolete )
|
||
|
obsoleted++;
|
||
|
} else {
|
||
|
switch ( m.type() ) {
|
||
|
case MetaTranslatorMessage::Finished:
|
||
|
newType = MetaTranslatorMessage::Finished;
|
||
|
known++;
|
||
|
break;
|
||
|
case MetaTranslatorMessage::Unfinished:
|
||
|
newType = MetaTranslatorMessage::Unfinished;
|
||
|
known++;
|
||
|
break;
|
||
|
case MetaTranslatorMessage::Obsolete:
|
||
|
newType = MetaTranslatorMessage::Unfinished;
|
||
|
neww++;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if ( newType != m.type() ) {
|
||
|
m.setType( newType );
|
||
|
tor->insert( m );
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
Messages found only in the virgin translator are added to the
|
||
|
vernacular translator. Among these are all the context comments.
|
||
|
*/
|
||
|
all = virginTor->messages();
|
||
|
|
||
|
for ( it = all.begin(); it != all.end(); ++it ) {
|
||
|
if ( !tor->contains((*it).context(), (*it).sourceText(),
|
||
|
(*it).comment()) ) {
|
||
|
tor->insert( *it );
|
||
13 years ago
|
if ( !TQCString((*it).sourceText()).isEmpty() )
|
||
13 years ago
|
neww++;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
The same-text heuristic handles cases where a message has an
|
||
|
obsolete counterpart with a different context or comment.
|
||
|
*/
|
||
|
applySameTextHeuristic( tor, verbose );
|
||
|
|
||
|
/*
|
||
|
The number heuristic handles cases where a message has an
|
||
|
obsolete counterpart with mostly numbers differing in the
|
||
|
source text.
|
||
|
*/
|
||
|
applyNumberHeuristic( tor, verbose );
|
||
|
|
||
|
if ( verbose )
|
||
13 years ago
|
tqWarning( " %d known, %d new and %d obsoleted messages",
|
||
13 years ago
|
known, neww, obsoleted );
|
||
|
}
|