⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 metatranslator.cpp

📁 Linux下的基于X11的图形开发环境。
💻 CPP
📖 第 1 页 / 共 2 页
字号:
    utfeight = m.utfeight;    ty = m.ty;    return *this;}bool MetaTranslatorMessage::operator==( const MetaTranslatorMessage& m ) const{    return qstrcmp( context(), m.context() ) == 0 &&	   qstrcmp( sourceText(), m.sourceText() ) == 0 &&	   qstrcmp( comment(), m.comment() ) == 0;}bool MetaTranslatorMessage::operator<( const MetaTranslatorMessage& m ) const{    int delta = qstrcmp( context(), m.context() );    if ( delta == 0 )	delta = qstrcmp( sourceText(), m.sourceText() );    if ( delta == 0 )	delta = qstrcmp( comment(), m.comment() );    return delta < 0;}MetaTranslator::MetaTranslator()    : codecName( "ISO-8859-1" ), codec( 0 ){}MetaTranslator::MetaTranslator( const MetaTranslator& tor )    : mm( tor.mm ), codecName( tor.codecName ), codec( tor.codec ){}MetaTranslator& MetaTranslator::operator=( const MetaTranslator& tor ){    mm = tor.mm;    codecName = tor.codecName;    codec = tor.codec;    return *this;}bool MetaTranslator::load( const QString& filename ){    mm.clear();    QFile f( filename );    if ( !f.open(IO_ReadOnly) )	return FALSE;    QTextStream t( &f );    QXmlInputSource in( t );    QXmlSimpleReader reader;    // don't click on these!    reader.setFeature( "http://xml.org/sax/features/namespaces", FALSE );    reader.setFeature( "http://xml.org/sax/features/namespace-prefixes", TRUE );    reader.setFeature( "http://trolltech.com/xml/features/report-whitespace"		       "-only-CharData", FALSE );    QXmlDefaultHandler *hand = new TsHandler( this );    reader.setContentHandler( hand );    reader.setErrorHandler( hand );    bool ok = reader.parse( in );    reader.setContentHandler( 0 );    reader.setErrorHandler( 0 );    delete hand;    f.close();    if ( !ok )	mm.clear();    return ok;}bool MetaTranslator::save( const QString& filename ) const{    QFile f( filename );    if ( !f.open(IO_WriteOnly) )	return FALSE;    QTextStream t( &f );    t.setCodec( QTextCodec::codecForName("ISO-8859-1") );    t << "<!DOCTYPE TS><TS>\n";    if ( codecName != "ISO-8859-1" )	t << "<defaultcodec>" << codecName << "</defaultcodec>\n";    TMM::ConstIterator m = mm.begin();    while ( m != mm.end() ) {	TMMInv inv;	TMMInv::Iterator i;	bool contextIsUtf8 = m.key().utf8();	QCString context = m.key().context();	QCString comment = "";	do {	    if ( QCString(m.key().sourceText()).isEmpty() ) {		if ( m.key().type() != MetaTranslatorMessage::Obsolete ) {		    contextIsUtf8 = m.key().utf8();		    comment = QCString( m.key().comment() );		}	    } else {		inv.insert( *m, m.key() );	    }	} while ( ++m != mm.end() && QCString(m.key().context()) == context );	t << "<context";	if ( contextIsUtf8 )	    t << " encoding=\"UTF-8\"";	t << ">\n";	t << "    <name>" << evilBytes( context, contextIsUtf8 )	  << "</name>\n";	if ( !comment.isEmpty() )	    t << "    <comment>" << evilBytes( comment, contextIsUtf8 )	      << "</comment>\n";	for ( i = inv.begin(); i != inv.end(); ++i ) {	    // no need for such noise	    if ( (*i).type() == MetaTranslatorMessage::Obsolete &&		 (*i).translation().isEmpty() )		continue;	    t << "    <message";	    if ( (*i).utf8() )		t << " encoding=\"UTF-8\"";	    t << ">\n"	      << "        <source>" << evilBytes( (*i).sourceText(),						  (*i).utf8() )	      << "</source>\n";	    if ( !QCString((*i).comment()).isEmpty() )		t << "        <comment>" << evilBytes( (*i).comment(),						       (*i).utf8() )		  << "</comment>\n";	    t << "        <translation";	    if ( (*i).type() == MetaTranslatorMessage::Unfinished )		t << " type=\"unfinished\"";	    else if ( (*i).type() == MetaTranslatorMessage::Obsolete )		t << " type=\"obsolete\"";	    t << ">" << protect( (*i).translation().utf8() )	      << "</translation>\n";	    t << "    </message>\n";	}	t << "</context>\n";    }    t << "</TS>\n";    f.close();    return TRUE;}bool MetaTranslator::release( const QString& filename, bool verbose ) const{    QTranslator tor( 0 );    int finished = 0;    int unfinished = 0;    int untranslated = 0;    TMM::ConstIterator m;    for ( m = mm.begin(); m != mm.end(); ++m ) {	if ( m.key().type() != MetaTranslatorMessage::Obsolete ) {	    if ( m.key().translation().isEmpty() ) {		untranslated++;	    } else {		if ( m.key().type() == MetaTranslatorMessage::Unfinished )		    unfinished++;		else		    finished++;		QCString context = m.key().context();		QCString sourceText = m.key().sourceText();		QCString comment = m.key().comment();		QString translation = m.key().translation();		/*		  Drop the comment in (context, sourceText, comment),		  unless (context, sourceText, "") already exists, or		  unless we already dropped the comment of (context,		  sourceText, comment0).		*/		if ( comment.isEmpty()		     || contains(context, sourceText, "")		     || !tor.findMessage(context, sourceText, "").translation()			    .isNull() ) {		    tor.insert( m.key() );		} else {		    tor.insert( QTranslatorMessage(context, sourceText, "",						   translation) );		}	    }	}    }    bool saved = tor.save( filename, QTranslator::Stripped );    if ( saved && verbose )	fprintf( stderr,		 " %d finished, %d unfinished and %d untranslated messages\n",		 finished, unfinished, untranslated );		    return saved;}bool MetaTranslator::contains( const char *context, const char *sourceText,			       const char *comment ) const{    return mm.find( MetaTranslatorMessage(context, sourceText, comment) ) !=	   mm.end();}void MetaTranslator::insert( const MetaTranslatorMessage& m ){    int pos = mm.count();    TMM::Iterator n = mm.find( m );    if ( n != mm.end() )	pos = *n;    mm.replace( m, pos );}void MetaTranslator::stripObsoleteMessages(){    TMM newmm;    TMM::Iterator m = mm.begin();    while ( m != mm.end() ) {	if ( m.key().type() != MetaTranslatorMessage::Obsolete )	    newmm.insert( m.key(), *m );	++m;    }    mm = newmm;}void MetaTranslator::stripEmptyContexts(){    TMM newmm;    TMM::Iterator m = mm.begin();    while ( m != mm.end() ) {	if ( QCString(m.key().sourceText()).isEmpty() ) {	    TMM::Iterator n = m;	    ++n;	    // the context comment is followed by other messages	    if ( n != newmm.end() &&		 qstrcmp(m.key().context(), n.key().context()) == 0 )		newmm.insert( m.key(), *m );	} else {	    newmm.insert( m.key(), *m );	}	++m;    }    mm = newmm;}void MetaTranslator::setCodec( const char *name ){    const int latin1 = 4;    codecName = name;    codec = QTextCodec::codecForName( name );    if ( codec == 0 || codec->mibEnum() == latin1 )	codec = 0;}QString MetaTranslator::toUnicode( const char *str, bool utf8 ) const{    if ( utf8 )	return QString::fromUtf8( str );    else if ( codec == 0 )	return QString( str );    else	return codec->toUnicode( str );}QValueList<MetaTranslatorMessage> MetaTranslator::messages() const{    int n = mm.count();    TMM::ConstIterator *t = new TMM::ConstIterator[n + 1];    TMM::ConstIterator m;    for ( m = mm.begin(); m != mm.end(); ++m )	t[*m] = m;    QValueList<MetaTranslatorMessage> val;    for ( int i = 0; i < n; i++ )	val.append( t[i].key() );    delete[] t;    return val;}QValueList<MetaTranslatorMessage> MetaTranslator::translatedMessages() const{    QValueList<MetaTranslatorMessage> val;    TMM::ConstIterator m;    for ( m = mm.begin(); m != mm.end(); ++m ) {	if ( m.key().type() == MetaTranslatorMessage::Finished )	    val.append( m.key() );    }    return val;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -