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

📄 qxmlstream.g

📁 奇趣公司比较新的qt/emd版本
💻 G
📖 第 1 页 / 共 4 页
字号:
    bool scanUntil(const char *str, short tokenToInject = -1);    bool scanString(const char *str, short tokenToInject, bool requireSpace = true);    inline void injectToken(ushort tokenToInject) {        putChar(int(tokenToInject) << 16);    }    static bool validateName(const QStringRef &name);    void parseEntity(const QString &value);    QXmlStreamReaderPrivate *entityParser;    bool scanAfterLangleBang();    bool scanPublicOrSystem();    bool scanNData();    bool scanAfterDefaultDecl();    bool scanAttType();    // scan optimization functions. Not strictly necessary but LALR is    // not very well suited for scanning fast    int fastScanLiteralContent();    int fastScanSpace();    int fastScanContentCharList();    int fastScanName(int *prefix = 0);    inline int fastScanNMTOKEN();    bool parse();    inline void consumeRule(int);    void raiseError(QXmlStreamReader::Error error, const QString& message = QString());    void raiseWellFormedError(const QString &message);private:    /*! \internal       Never assign to variable type directly. Instead use this function.       This prevents errors from being ignored.     */    inline void setType(const QXmlStreamReader::TokenType t)    {        if(type != QXmlStreamReader::Invalid)            type = t;    }};bool QXmlStreamReaderPrivate::parse(){    // cleanup currently reported token    switch (type) {    case QXmlStreamReader::StartElement:        name.clear();        prefix.clear();	qualifiedName.clear();        namespaceUri.clear();        if (publicNamespaceDeclarations.size())            publicNamespaceDeclarations.clear();        if (attributes.size())            attributes.resize(0);        if (isEmptyElement) {            setType(QXmlStreamReader::EndElement);            Tag &tag = tagStack_pop();            namespaceUri = tag.namespaceDeclaration.namespaceUri;            name = tag.name;	    qualifiedName = tag.qualifiedName;            isEmptyElement = false;            return true;        }        clearTextBuffer();        break;    case QXmlStreamReader::EndElement:        name.clear();        prefix.clear();	qualifiedName.clear();        namespaceUri.clear();        clearTextBuffer();        break;    case QXmlStreamReader::DTD:        publicNotationDeclarations.clear();        publicEntityDeclarations.clear();        // fall through    case QXmlStreamReader::Comment:    case QXmlStreamReader::Characters:        isCDATA = isWhitespace = false;        text.clear();        clearTextBuffer();        break;    case QXmlStreamReader::EntityReference:        text.clear();        name.clear();        clearTextBuffer();        break;    case QXmlStreamReader::ProcessingInstruction:        processingInstructionTarget.clear();        processingInstructionData.clear();	clearTextBuffer();        break;    case QXmlStreamReader::NoToken:    case QXmlStreamReader::Invalid:        break;    case QXmlStreamReader::StartDocument:	lockEncoding = true;#ifndef QT_NO_TEXTCODEC	if(decoder->hasFailure()) {	    raiseWellFormedError(QXmlStream::tr("Encountered incorrectly encoded content."));	    readBuffer.clear();	    return false;	}#endif        // fall through    default:        clearTextBuffer();        ;    }    setType(QXmlStreamReader::NoToken);    // the main parse loop    int act, r;    if (resumeReduction) {        act = state_stack[tos-1];        r = resumeReduction;        resumeReduction = 0;        goto ResumeReduction;    }    act = state_stack[tos];    forever {        if (token == -1 && - TERMINAL_COUNT != action_index[act]) {            uint cu = getChar();            token = NOTOKEN;            token_char = cu;            if (cu & 0xff0000) {                token = cu >> 16;            } else switch (token_char) {            case 0xfffe:            case 0xffff:                token = ERROR;                break;            case '\r':                token = SPACE;                if (cu == '\r') {                    if ((token_char = filterCarriageReturn())) {                        ++lineNumber;                        lastLineStart = characterOffset + readBufferPos;                        break;                    }                } else {                    break;                }                // fall through            case '\0': {                token = EOF_SYMBOL;                if (!tagsDone && !inParseEntity) {                    int a = t_action(act, token);                    if (a < 0) {                        raiseError(QXmlStreamReader::PrematureEndOfDocumentError);                        return false;                    }                }            } break;            case '\n':                ++lineNumber;                lastLineStart = characterOffset + readBufferPos;            case ' ':            case '\t':                token = SPACE;                break;            case '&':                token = AMPERSAND;                break;            case '#':                token = HASH;                break;            case '\'':                token = QUOTE;                break;            case '\"':                token = DBLQUOTE;                break;            case '<':                token = LANGLE;                break;            case '>':                token = RANGLE;                break;            case '[':                token = LBRACK;                break;            case ']':                token = RBRACK;                break;            case '(':                token = LPAREN;                break;            case ')':                token = RPAREN;                break;            case '|':                token = PIPE;                break;            case '=':                token = EQ;                break;            case '%':                token = PERCENT;                break;            case '/':                token = SLASH;                break;            case ':':                token = COLON;                break;            case ';':                token = SEMICOLON;                break;            case ',':                token = COMMA;                break;            case '-':                token = DASH;                break;            case '+':                token = PLUS;                break;            case '*':                token = STAR;                break;            case '.':                token = DOT;                break;            case '?':                token = QUESTIONMARK;                break;            case '!':                token = BANG;                break;            case '0':            case '1':            case '2':            case '3':            case '4':            case '5':            case '6':            case '7':            case '8':            case '9':                token = DIGIT;                break;            default:                if (cu < 0x20)                    token = NOTOKEN;                else                    token = LETTER;                break;            }        }        act = t_action (act, token);        if (act == ACCEPT_STATE) {            // reset the parser in case someone resumes (process instructions can follow a valid document)            tos = 0;            state_stack[tos++] = 0;            state_stack[tos] = 0;            return true;        } else if (act > 0) {            if (++tos == stack_size)                reallocateStack();            Value &val = sym_stack[tos];            val.c = token_char;            val.pos = textBuffer.size();            val.prefix = 0;            val.len = 1;            if (token_char)                textBuffer.inline_append(token_char);            state_stack[tos] = act;            token = -1;        } else if (act < 0) {            r = - act - 1;#if defined (QLALR_DEBUG)            int ridx = rule_index[r];            printf ("%3d) %s ::=", r + 1, spell[rule_info[ridx]]);            ++ridx;            for (int i = ridx; i < ridx + rhs[r]; ++i) {                int symbol = rule_info[i];                if (const char *name = spell[symbol])                    printf (" %s", name);                else                    printf (" #%d", symbol);            }            printf ("\n");#endif            tos -= rhs[r];            act = state_stack[tos++];        ResumeReduction:            switch (r) {./document ::= PARSE_ENTITY content;/.        case $rule_number:            setType(QXmlStreamReader::EndDocument);        break;./document ::= prolog;/.        case $rule_number:            if (type != QXmlStreamReader::Invalid) {                if (hasSeenTag || inParseEntity) {                    setType(QXmlStreamReader::EndDocument);                } else {                    raiseError(QXmlStreamReader::PrematureEndOfDocumentError, QXmlStream::tr("Start tag expected."));                    // reset the parser                    tos = 0;                    state_stack[tos++] = 0;                    state_stack[tos] = 0;                    return false;                }            }        break;./prolog ::= prolog stag content etag;prolog ::= prolog empty_element_tag;prolog ::= prolog comment;prolog ::= prolog xml_decl;prolog ::= prolog processing_instruction;prolog ::= prolog doctype_decl;prolog ::= prolog SPACE;prolog ::=;entity_done ::= ENTITY_DONE;/.        case $rule_number:            entityReferenceStack.pop()->isCurrentlyReferenced = false;            clearSym();        break;./xml_decl_start ::= XML;/.        case $rule_number:            if (!scanString(spell[VERSION], VERSION, false) && atEnd) {                resume($rule_number);                return false;            }        break;./xml_decl ::= xml_decl_start VERSION space_opt EQ space_opt literal attribute_list_opt QUESTIONMARK RANGLE;/.        case $rule_number:            setType(QXmlStreamReader::StartDocument);            startDocument(symString(6));        break;./external_id ::= SYSTEM literal;/.        case $rule_number:            hasExternalDtdSubset = true;        break;./external_id ::= PUBLIC public_literal space literal;/.        case $rule_number:            checkPublicLiteral(symString(2));            hasExternalDtdSubset = true;        break;./external_id ::=;doctype_decl_start ::= langle_bang DOCTYPE name space;/.        case $rule_number:            if (!scanPublicOrSystem() && atEnd) {                resume($rule_number);                return false;            }        break;./doctype_decl ::= doctype_decl_start external_id space_opt markup space_opt RANGLE;/.        case $rule_number:./doctype_decl ::= doctype_decl_start external_id space_opt RANGLE;/.        case $rule_number:./doctype_decl ::= langle_bang DOCTYPE name RANGLE;/.        case $rule_number:./doctype_decl ::= langle_bang DOCTYPE name markup space_opt RANGLE;/.        case $rule_number:            setType(QXmlStreamReader::DTD);            text = &textBuffer;        break;./markup_start ::= LBRACK;/.        case $rule_number:            scanDtd = true;        break;./markup ::= markup_start markup_list RBRACK;/.        case $rule_number:            scanDtd = false;        break;./markup_list ::= markup_decl | space | pereference;markup_list ::= markup_list markup_decl | markup_list space | markup_list pereference;markup_decl ::= element_decl | attlist_decl | entity_decl | entity_done | notation_decl | processing_instruction | comment;element_decl_start ::= langle_bang ELEMENT name space;/.        case $rule_number:            if (!scanString(spell[EMPTY], EMPTY, false)                && !scanString(spell[ANY], ANY, false)                && atEnd) {

⌨️ 快捷键说明

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