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

📄 fetchtr.cpp

📁 qt-x11-opensource-src-4.1.4.tar.gz源码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
				quiet = false;                while ( yyCh != EOF && yyCh != '\n' && yyCh != '"' ) {                    if ( yyCh == '\\' ) {                        yyCh = getChar();                        if ( yyCh == '\n' ) {                            yyCh = getChar();                        } else if ( yyCh == 'r' ) { // Skip \r since Linguist also removes those.                            yyCh = getChar();                        } else if ( yyCh == 'x' ) {                            QByteArray hex = "0";                            yyCh = getChar();                            while ( isxdigit(yyCh) ) {                                hex += (char) yyCh;                                yyCh = getChar();                            }#if defined(_MSC_VER) && _MSC_VER >= 1400							sscanf_s( hex, "%x", &n );#else                            sscanf( hex, "%x", &n );#endif                            if ( yyStringLen < sizeof(yyString) - 1 )                                yyString[yyStringLen++] = (char) n;                        } else if ( yyCh >= '0' && yyCh < '8' ) {                            QByteArray oct = "";                            int n = 0;                            do {                                oct += (char) yyCh;                                ++n;                                yyCh = getChar();                            } while ( yyCh >= '0' && yyCh < '8' && n < 3 );#if defined(_MSC_VER) && _MSC_VER >= 1400							sscanf_s( oct, "%o", &n );#else                            sscanf( oct, "%o", &n );#endif                            if ( yyStringLen < sizeof(yyString) - 1 )                                yyString[yyStringLen++] = (char) n;                        } else {                            const char *p = strchr( tab, yyCh );                            if ( yyStringLen < sizeof(yyString) - 1 )                                yyString[yyStringLen++] = ( p == 0 ) ?                                        (char) yyCh : backTab[p - tab];                            yyCh = getChar();                        }                    } else {						if (!yyCodecForSource) {							if ( yyParsingUtf8 && yyCh >= 0x80 && !quiet) {								qWarning( "%s:%d: Non-ASCII character detected in trUtf8 string",										  (const char *) yyFileName, yyLineNo );								quiet = true;							}							// common case: optimized							if ( yyStringLen < sizeof(yyString) - 1 )								yyString[yyStringLen++] = (char) yyCh;							yyCh = getChar();						} else {							QByteArray originalBytes;							while ( yyCh != EOF && yyCh != '\n' && yyCh != '"' && yyCh != '\\' ) {								if ( yyParsingUtf8 && yyCh >= 0x80 && !quiet) {									qWarning( "%s:%d: Non-ASCII character detected in trUtf8 string",											(const char *) yyFileName, yyLineNo );									quiet = true;								}								originalBytes += (char)yyCh;								yyCh = getChar();							}							QString unicodeStr = yyCodecForSource->toUnicode(originalBytes);							QByteArray convertedBytes;							if (!yyCodecForTr->canEncode(unicodeStr) && !quiet) {								qWarning( "%s:%d: Cannot convert C++ string from %s to %s",										  (const char *) yyFileName, yyLineNo, yyCodecForSource->name().constData(),										  yyCodecForTr->name().constData() );								quiet = true;							}							convertedBytes = yyCodecForTr->fromUnicode(unicodeStr);							size_t len = qMin((size_t)convertedBytes.size(), sizeof(yyString) - yyStringLen - 1);							memcpy(yyString + yyStringLen, convertedBytes.constData(), len);							yyStringLen += len;						}                    }                }                yyString[yyStringLen] = '\0';                if ( yyCh != '"' )                    qWarning( "%s:%d: Unterminated C++ string",                              (const char *) yyFileName, yyLineNo );                if ( yyCh == EOF ) {                    return Tok_Eof;                } else {                    yyCh = getChar();                    return Tok_String;                }                break;            case '-':                yyCh = getChar();                if ( yyCh == '>' ) {                    yyCh = getChar();                    return Tok_Arrow;                }                break;            case ':':                yyCh = getChar();                if ( yyCh == ':' ) {                    yyCh = getChar();                    return Tok_Gulbrandsen;                }                return Tok_Colon;            case '\'':                yyCh = getChar();                if ( yyCh == '\\' )                    yyCh = getChar();                do {                    yyCh = getChar();                } while ( yyCh != EOF && yyCh != '\'' );                yyCh = getChar();                break;            case '{':                if (yyBraceDepth == 0)                    yyBraceLineNo = yyCurLineNo;                yyBraceDepth++;                yyCh = getChar();                return Tok_LeftBrace;            case '}':                if (yyBraceDepth == 0)                    yyBraceLineNo = yyCurLineNo;                yyBraceDepth--;                yyCh = getChar();                return Tok_RightBrace;            case '(':                if (yyParenDepth == 0)                    yyParenLineNo = yyCurLineNo;                yyParenDepth++;                yyCh = getChar();                return Tok_LeftParen;            case ')':                if (yyParenDepth == 0)                    yyParenLineNo = yyCurLineNo;                yyParenDepth--;                yyCh = getChar();                return Tok_RightParen;            case ',':                yyCh = getChar();                return Tok_Comma;            case ';':                yyCh = getChar();                return Tok_Semicolon;            case '0':            case '1':            case '2':            case '3':            case '4':            case '5':            case '6':            case '7':            case '8':            case '9':                {                    QByteArray ba;                    ba+=yyCh;                    yyCh = getChar();                    bool hex = yyCh == 'x';                    if ( hex ) {                        ba+=yyCh;                        yyCh = getChar();                    }                    while ( (hex ? isxdigit(yyCh) : isdigit(yyCh)) ) {                        ba+=yyCh;                        yyCh = getChar();                    }                    bool ok;                    yyInteger = ba.toLongLong(&ok);                    if (ok) return Tok_Integer;                    break;                }             default:                yyCh = getChar();            }        }    }    return Tok_Eof;}/*  The second part of this source file is the parser. It accomplishes  a very easy task: It finds all strings inside a tr() or translate()  call, and possibly finds out the context of the call. It supports  three cases: (1) the context is specified, as in  FunnyDialog::tr("Hello") or translate("FunnyDialog", "Hello");  (2) the call appears within an inlined function; (3) the call  appears within a function defined outside the class definition.*/static int yyTok;static bool match( int t ){    bool matches = ( yyTok == t );    if ( matches )        yyTok = getToken();    return matches;}static bool matchString( QByteArray *s ){    bool matches = ( yyTok == Tok_String );    *s = "";    while ( yyTok == Tok_String ) {        *s += yyString;        yyTok = getToken();    }    return matches;}static bool matchEncoding( bool *utf8 ){    if ( yyTok == Tok_Ident ) {        if ( strcmp(yyIdent, "QApplication") == 0 || strcmp(yyIdent, "QCoreApplication") == 0) {            yyTok = getToken();            if ( yyTok == Tok_Gulbrandsen )                yyTok = getToken();        }        *utf8 = QString( yyIdent ).endsWith( QString("UTF8") );        yyTok = getToken();        return true;    } else {        return false;    }}static bool matchInteger( qlonglong *number){    bool matches = (yyTok == Tok_Integer);    if (matches) {        yyTok = getToken();        *number = yyInteger;    }    return matches;}static bool matchStringOrNull(QByteArray *s){    bool matches = matchString(s);    qlonglong num = 0;    if (!matches) matches = matchInteger(&num);    return matches && num == 0;}static void parse( MetaTranslator *tor, const char *initialContext, const char *defaultContext ){    QMap<QByteArray, QByteArray> qualifiedContexts;    QStringList namespaces;    QByteArray context;    QByteArray text;    QByteArray com;    QByteArray functionContext = initialContext;    QByteArray prefix;    bool utf8 = false;    bool missing_Q_OBJECT = false;    yyTok = getToken();    while ( yyTok != Tok_Eof ) {        switch ( yyTok ) {        case Tok_class:            /*              Partial support for inlined functions.            */            yyTok = getToken();            if ( yyBraceDepth == (int) namespaces.count() &&                 yyParenDepth == 0 ) {                do {                    /*                      This code should execute only once, but we play                      safe with impure definitions such as                      'class Q_EXPORT QMessageBox', in which case                      'QMessageBox' is the class name, not 'Q_EXPORT'.                    */                    functionContext = yyIdent;                    yyTok = getToken();                } while ( yyTok == Tok_Ident );                while ( yyTok == Tok_Gulbrandsen ) {                    yyTok = getToken();                    functionContext += "::";                    functionContext += yyIdent;                    yyTok = getToken();                }                if ( yyTok == Tok_Colon ) {                    missing_Q_OBJECT = true;                } else {                    functionContext = defaultContext;                }            }            break;        case Tok_namespace:            yyTok = getToken();            if ( yyTok == Tok_Ident ) {                QByteArray ns = yyIdent;                yyTok = getToken();                if ( yyTok == Tok_LeftBrace &&                     yyBraceDepth == (int) namespaces.count() + 1 )                    namespaces.append( QString(ns) );            }            break;        case Tok_tr:        case Tok_trUtf8:            utf8 = ( yyTok == Tok_trUtf8 );            yyTok = getToken();            if ( match(Tok_LeftParen) && matchString(&text) ) {

⌨️ 快捷键说明

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