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

📄 translator.cpp

📁 QT 开发环境里面一个很重要的文件
💻 CPP
📖 第 1 页 / 共 2 页
字号:
        quint16 *hTable = new quint16[hTableSize];        memset(hTable, 0, hTableSize * sizeof(quint16));        t << hTableSize;        t.device()->seek(2 + (hTableSize << 1));        t << (quint16)0; // the entry at offset 0 cannot be used        uint upto = 2;        QMap<int, const char *>::const_iterator entry = hashMap.constBegin();        while (entry != hashMap.constEnd()) {            int i = entry.key();            hTable[i] = (quint16)(upto >> 1);            do {	            const char *con = entry.value();                uint len = (uint)qstrlen(con);                len = qMin(len, 255u);                t << (quint8)len;                t.writeRawData(con, len);                upto += 1 + len;                ++entry;            } while (entry != hashMap.constEnd() && entry.key() == i);            do {                t << (quint8) 0; // empty string                ++upto;            } while ((upto & 0x1) != 0); // offsets have to be even        }        t.device()->seek(2);        for (int j = 0; j < hTableSize; j++)            t << hTable[j];        delete [] hTable;        if (upto > 131072) {            qWarning("Translator::squeeze: Too many contexts");            d->contextArray.clear();        }    }}void Translator::unsqueeze(){    if (!d->messages.isEmpty() || d->messageArray.isEmpty())        return;    qFatal("Cannot unsqueeze (bug in Linguist?)");}bool Translator::contains(const char* context, const char* sourceText,                            const char* comment) const{    return !findMessage(context, sourceText, comment).translation().isNull();}bool Translator::contains(const char *context,                            const char *comment, const QString &fileName, int lineNumber) const{    return !findMessage(context, 0, comment, fileName, lineNumber).isNull();}void Translator::insert(const TranslatorMessage& message){    unsqueeze();    d->messages.remove(message); // safer    d->messages.insert(message, (void *) 0);}void Translator::remove(const TranslatorMessage& message){    unsqueeze();    d->messages.remove(message);}TranslatorMessage Translator::findMessage(const char *context, const char *sourceText,                                          const char *comment,                                          const QString &fileName, int lineNumber) const{    if (context == 0)        context = "";    if (sourceText == 0)        sourceText = "";    if (comment == 0)        comment = "";        QString myFilename = fileName;    int myLineNumber = lineNumber;    if (!d->messages.isEmpty()) {        QMap<TranslatorMessage, void *>::const_iterator it;        // Either we want to find an item that matches context, sourcetext (and optionally comment)        // Or we want to find an item that matches context, filename, linenumber (and optionally comment)        it = d->messages.constFind(TranslatorMessage(context, sourceText, comment, myFilename, myLineNumber));        if (it != d->messages.constEnd())            return it.key();        if (comment[0]) {            it = d->messages.constFind(TranslatorMessage(context, sourceText, "", myFilename, myLineNumber));            if (it != d->messages.constEnd())                return it.key();        }                it = d->messages.constFind(TranslatorMessage(context, "", comment, myFilename, myLineNumber));        if (it != d->messages.constEnd())            return it.key();        if (comment[0]) {            it = d->messages.constFind(TranslatorMessage(context, "", "", myFilename, myLineNumber));            if (it != d->messages.constEnd())                return it.key();        }        return TranslatorMessage();    }    return TranslatorMessage();}bool Translator::isEmpty() const{    return !d->unmapPointer && !d->unmapLength && d->messageArray.isEmpty() &&           d->offsetArray.isEmpty() && d->contextArray.isEmpty() && d->messages.isEmpty();}void Translator::setNumerusRules(const QByteArray &rules){    d->numerusRules = rules;}QList<TranslatorMessage> Translator::messages() const{    ((Translator *) this)->unsqueeze();    return d->messages.keys();}TranslatorMessage::TranslatorMessage()    : m_hash(0), m_fileName(), m_lineNumber(-1){}TranslatorMessage::TranslatorMessage(const char * context,                                        const char * sourceText,                                        const char * comment,                                        const QString &fileName,                                        int lineNumber,                                        const QStringList& translations)    :   m_context(context), m_sourcetext(sourceText), m_comment(comment),         m_translations(translations), m_fileName(fileName), m_lineNumber(lineNumber){    // 0 means we don't know, "" means empty    if (m_context == (const char*)0)        m_context = "";    if (m_sourcetext == (const char*)0)        m_sourcetext = "";    if (m_comment == (const char*)0)        m_comment = "";    m_hash = elfHash(m_sourcetext + m_comment);}TranslatorMessage::TranslatorMessage(const TranslatorMessage & m)    :   m_context(m.m_context), m_sourcetext(m.m_sourcetext), m_comment(m.m_comment),         m_translations(m.m_translations), m_fileName(m.m_fileName), m_lineNumber(m.m_lineNumber){    m_hash = m.m_hash;}TranslatorMessage & TranslatorMessage::operator=(        const TranslatorMessage & m){    m_hash = m.m_hash;    m_context = m.m_context;    m_sourcetext = m.m_sourcetext;    m_comment = m.m_comment;    m_translations = m.m_translations;    m_fileName = m.m_fileName;    m_lineNumber = m.m_lineNumber;        return *this;}void TranslatorMessage::write(QDataStream & stream, bool strip, Prefix prefix) const{    for (int i = 0; i < m_translations.count(); ++i)        stream << quint8(Tag_Translation) << m_translations.at(i);    if (!strip)        prefix = HashContextSourceTextComment;    switch (prefix) {    case HashContextSourceTextComment:        stream << quint8(Tag_Comment) << m_comment;        // fall through    case HashContextSourceText:        stream << quint8(Tag_SourceText) << m_sourcetext;        // fall through    case HashContext:        stream << quint8(Tag_Context) << m_context;    default:        ;    }    stream << quint8(Tag_End);}TranslatorMessage::Prefix TranslatorMessage::commonPrefix(const TranslatorMessage& m) const{    if (m_hash != m.m_hash)        return NoPrefix;    if (m_context != m.m_context)        return Hash;    if (m_sourcetext != m.m_sourcetext)        return HashContext;    if (m_comment != m.m_comment)        return HashContextSourceText;    return HashContextSourceTextComment;}bool TranslatorMessage::operator==(const TranslatorMessage& m) const{    bool isHashEq = (m_hash == m.m_hash ? true : false);    bool isContextEq = (m_context == m.m_context ? true : false);    bool isSourceEq = (m_sourcetext == m.m_sourcetext ? true : false);    bool isCommentEq = (m_comment == m.m_comment ? true : false);    bool isLocationEq = m_lineNumber == m.m_lineNumber && m_fileName == m.m_fileName;        return (isHashEq && isContextEq && isSourceEq && isCommentEq) || // translation can be different, but treat the equal            (m_sourcetext.isEmpty() && isContextEq && isCommentEq && isLocationEq);}bool TranslatorMessage::operator<(const TranslatorMessage& m) const{    return m_hash != m.m_hash ? m_hash < m.m_hash           : (m_context != m.m_context ? m_context < m.m_context             : (m_sourcetext != m.m_sourcetext ? m_sourcetext < m.m_sourcetext : m_comment < m.m_comment));}bool getNumerusInfo(QLocale::Language language, QLocale::Country country,                           QByteArray *rules, QStringList *forms){    forever {        for (int i = 0; i < NumerusTableSize; ++i) {            const NumerusTableEntry &entry = numerusTable[i];            for (int j = 0; entry.languages[j] != EOL; ++j) {                if (entry.languages[j] == language                        && ((!entry.countries && country == QLocale::AnyCountry)                            || (entry.countries && entry.countries[j] == country))) {                    if (rules) {                        *rules = QByteArray::fromRawData(reinterpret_cast<const char *>(entry.rules),                                                    entry.rulesSize);                    }                    if (forms) {                        forms->clear();                        for (int k = 0; entry.forms[k]; ++k)                            forms->append(QLatin1String(entry.forms[k]));                    }                    return true;                }            }        }        if (country == QLocale::AnyCountry)            break;        country = QLocale::AnyCountry;    }    return false;}#endif // QT_NO_TRANSLATION

⌨️ 快捷键说明

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