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

📄 metatranslator.cpp

📁 qt-x11-opensource-src-4.1.4.tar.gz源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
    TranslatorMessage::operator=( m );    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(){    clear();}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;}void MetaTranslator::clear(){    mm.clear();    codecName = "ISO-8859-1";    codec = 0;}bool MetaTranslator::load( const QString& filename ){    QFile f( filename );    if ( !f.open(QIODevice::ReadOnly) )        return false;    QXmlInputSource in( &f );    QXmlSimpleReader reader;    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();    return ok;}bool MetaTranslator::save( const QString& filename ) const{    QFile f( filename );    if ( !f.open(QIODevice::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();        QByteArray context = m.key().context();        QByteArray comment = "";        do {            if (QByteArray(m.key().sourceText()) == ContextComment) {                if ( m.key().type() != MetaTranslatorMessage::Obsolete ) {                    contextIsUtf8 = m.key().utf8();                    comment = QByteArray(m.key().comment());                }            } else {                inv.insert( *m, m.key() );            }        } while ( ++m != mm.end() && QByteArray(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 ) {            MetaTranslatorMessage msg = *i;            // no need for such noise            if ( msg.type() == MetaTranslatorMessage::Obsolete && msg.translation().isEmpty() ) {                continue;            }            t << "    <message";            if ( msg.utf8() )                t << " encoding=\"UTF-8\"";            t << ">\n"              << "        <source>" << evilBytes( (*i).sourceText(),                                                  (*i).utf8() )              << "</source>\n";            if ( !QByteArray((*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().toUtf8() )              << "</translation>\n";            t << "    </message>\n";        }        t << "</context>\n";    }    t << "</TS>\n";    f.close();    return true;}bool MetaTranslator::release( const QString& filename, bool verbose,                              bool ignoreUnfinished,                              Translator::SaveMode mode ) const{    Translator tor( 0 );    int finished = 0;    int unfinished = 0;    int untranslated = 0;    TMM::ConstIterator m;    for ( m = mm.begin(); m != mm.end(); ++m ) {        MetaTranslatorMessage::Type typ = m.key().type();        if ( typ != MetaTranslatorMessage::Obsolete ) {            if ( typ == MetaTranslatorMessage::Unfinished ) {                if ( m.key().translation().isEmpty() ) {                    untranslated++;                } else {                    unfinished++;                }            } else {                finished++;            }            QByteArray context = m.key().context();            QByteArray sourceText = m.key().sourceText();            QByteArray comment = m.key().comment();            QString translation = m.key().translation();            if ( !ignoreUnfinished                 || typ != MetaTranslatorMessage::Unfinished ) {                /*                  Drop the comment in (context, sourceText, comment),                  unless the context is empty,                  unless (context, sourceText, "") already exists or                  unless we already dropped the comment of (context,                  sourceText, comment0).                */                if ( comment.isEmpty()                     || context.isEmpty()                     || contains(context, sourceText, "")                     || !tor.findMessage(context, sourceText, "").translation()                            .isNull() ) {                    tor.insert( m.key() );                } else {                    tor.insert( TranslatorMessage(context, sourceText, "",                                                   translation) );                }            }        }    }    bool saved = tor.save( filename, mode );    if ( saved && verbose ) {        int generatedCount = finished + unfinished;        fprintf( stderr,            "    Generated %d translation%s (%d finished and %d unfinished)\n",                generatedCount, generatedCount == 1 ? "" : "s", finished, unfinished);        if (untranslated)            fprintf( stderr, "    Ignored %d untranslated source text%s\n",                 untranslated, untranslated == 1 ? "" : "s");    }    return saved;}bool MetaTranslator::contains( const char *context, const char *sourceText,                               const char *comment ) const{    return mm.contains(MetaTranslatorMessage(context, sourceText, comment));}void MetaTranslator::insert( const MetaTranslatorMessage& m ){    int pos = mm.count();    if (mm.contains(m)) {        pos = mm.value(m);        mm.remove(m);    }    mm.insert(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 ( QByteArray(m.key().sourceText()) == ContextComment ) {            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 );}QList<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;    QList<MetaTranslatorMessage> val;    for ( int i = 0; i < n; i++ )        val.append( t[i].key() );    delete[] t;    return val;}QList<MetaTranslatorMessage> MetaTranslator::translatedMessages() const{    QList<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 + -