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

📄 qxmlstream_p.h

📁 奇趣公司比较新的qt/emd版本
💻 H
📖 第 1 页 / 共 5 页
字号:
        return true;    }    QIODevice *device;    bool deleteDevice;#ifndef QT_NO_TEXTCODEC    QTextCodec *codec;    QTextDecoder *decoder;#endif    bool atEnd;    /*!      \sa setType()     */    QXmlStreamReader::TokenType type;    QXmlStreamReader::Error error;    QString errorString;    qint64 lineNumber, lastLineStart, characterOffset;    void write(const QString &);    void write(const char *);    QXmlStreamAttributes attributes;    QStringRef namespaceForPrefix(const QStringRef &prefix);    void resolveTag();    void resolvePublicNamespaces();    void resolveDtd();    uint resolveCharRef(int symbolIndex);    bool checkStartDocument();    void startDocument(const QStringRef &version);    void parseError();    void checkPublicLiteral(const QStringRef &publicId);    bool scanDtd;    QStringRef lastAttributeValue;    bool lastAttributeIsCData;    struct DtdAttribute {        QStringRef tagName;        QStringRef attributeQualifiedName;        QStringRef attributePrefix;        QStringRef attributeName;        QStringRef defaultValue;        bool isCDATA;    };    QXmlStreamSimpleStack<DtdAttribute> dtdAttributes;    struct NotationDeclaration {        QStringRef name;        QStringRef publicId;        QStringRef systemId;    };    QXmlStreamSimpleStack<NotationDeclaration> notationDeclarations;    QXmlStreamNotationDeclarations publicNotationDeclarations;    QXmlStreamNamespaceDeclarations publicNamespaceDeclarations;    struct EntityDeclaration {        QStringRef name;        QStringRef notationName;        QStringRef publicId;        QStringRef systemId;        QStringRef value;        bool parameter;        bool external;        inline void clear() {            name.clear();            notationName.clear();            publicId.clear();            systemId.clear();            value.clear();            parameter = external = false;        }    };    QXmlStreamSimpleStack<EntityDeclaration> entityDeclarations;    QXmlStreamEntityDeclarations publicEntityDeclarations;    QStringRef text;    QStringRef prefix, namespaceUri, qualifiedName, name;    QStringRef processingInstructionTarget, processingInstructionData;    uint isEmptyElement : 1;    uint isWhitespace : 1;    uint isCDATA : 1;    uint standalone : 1;    uint hasCheckedStartDocument : 1;    uint normalizeLiterals : 1;    uint hasSeenTag : 1;    uint inParseEntity : 1;    uint referenceToUnparsedEntityDetected : 1;    uint referenceToParameterEntityDetected : 1;    uint hasExternalDtdSubset : 1;    uint lockEncoding : 1;    uint namespaceProcessing : 1;    int resumeReduction;    void resume(int rule);    inline bool entitiesMustBeDeclared() const {        return (!inParseEntity                && (standalone                    || (!referenceToUnparsedEntityDetected                        && !referenceToParameterEntityDetected // Errata 13 as of 2006-04-25                        && !hasExternalDtdSubset)));    }    // qlalr parser    int tos;    int stack_size;    struct Value {        int pos;        int len;        int prefix;        ushort c;    };    Value *sym_stack;    int *state_stack;    inline void reallocateStack();    inline Value &sym(int index) const    { return sym_stack[tos + index - 1]; }    QString textBuffer;    inline void clearTextBuffer() {        if (!scanDtd) {            textBuffer.resize(0);            textBuffer.reserve(256);        }    }    struct Attribute {        Value key;        Value value;    };    QXmlStreamSimpleStack<Attribute> attributeStack;    inline QStringRef symString(int index) {        const Value &symbol = sym(index);        return QStringRef(&textBuffer, symbol.pos + symbol.prefix, symbol.len - symbol.prefix);    }    inline QStringRef symName(int index) {        const Value &symbol = sym(index);        return QStringRef(&textBuffer, symbol.pos, symbol.len);    }    inline QStringRef symString(int index, int offset) {        const Value &symbol = sym(index);        return QStringRef(&textBuffer, symbol.pos + symbol.prefix + offset, symbol.len - symbol.prefix -  offset);    }    inline QStringRef symPrefix(int index) {        const Value &symbol = sym(index);        if (symbol.prefix)            return QStringRef(&textBuffer, symbol.pos, symbol.prefix - 1);        return QStringRef();    }    inline QStringRef symString(const Value &symbol) {        return QStringRef(&textBuffer, symbol.pos + symbol.prefix, symbol.len - symbol.prefix);    }    inline QStringRef symName(const Value &symbol) {        return QStringRef(&textBuffer, symbol.pos, symbol.len);    }    inline QStringRef symPrefix(const Value &symbol) {        if (symbol.prefix)            return QStringRef(&textBuffer, symbol.pos, symbol.prefix - 1);        return QStringRef();    }    inline void clearSym() { Value &val = sym(1); val.pos = textBuffer.size(); val.len = 0; }    short token;    ushort token_char;    uint filterCarriageReturn();    inline uint getChar();    inline uint peekChar();    inline void putChar(uint c) { putStack.push() = c; }    inline void putChar(QChar c) { putStack.push() =  c.unicode(); }    void putString(const QString &s, int from = 0);    void putStringLiteral(const QString &s);    void putReplacement(const QString &s);    void putReplacementInAttributeValue(const QString &s);    ushort getChar_helper();    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;

⌨️ 快捷键说明

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