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

📄 mxparser.java

📁 基于Jabber协议的即时消息服务器
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
                            needsMerging = true;                        } else {                            posStart = pos;  //completely ignore PI                        }                    } else if( isNameStartChar(ch) ) {                        if(!tokenize && hadCharData) {                            seenStartTag = true;                            //posEnd = pos - 2;                            return eventType = TEXT;                        }                        return eventType = parseStartTag();                    } else {                        throw new XmlPullParserException(                            "unexpected character in markup "+printable(ch), this, null);                    }                    // do content comapctation if it makes sense!!!!                } else if(ch == '&') {                    // work on ENTITTY                    //posEnd = pos - 1;                    if(tokenize && hadCharData) {                        seenAmpersand = true;                        return eventType = TEXT;                    }                    final int oldStart = posStart + bufAbsoluteStart;                    final int oldEnd = posEnd + bufAbsoluteStart;                    final char[] resolvedEntity = parseEntityRef();                    if(tokenize) return eventType = ENTITY_REF;                    // check if replacement text can be resolved !!!                    if(resolvedEntity == null) {                        if(entityRefName == null) {                            entityRefName = newString(buf, posStart, posEnd - posStart);                        }                        throw new XmlPullParserException(                            "could not resolve entity named '"+printable(entityRefName)+"'",                            this, null);                    }                    //int entStart = posStart;                    //int entEnd = posEnd;                    posStart = oldStart - bufAbsoluteStart;                    posEnd = oldEnd - bufAbsoluteStart;                    if(!usePC) {                        if(hadCharData) {                            joinPC(); // posEnd is already set correctly!!!                            needsMerging = false;                        } else {                            usePC = true;                            pcStart = pcEnd = 0;                        }                    }                    //assert usePC == true;                    // write into PC replacement text - do merge for replacement text!!!!                    for (int i = 0; i < resolvedEntity.length; i++)                    {                        if(pcEnd >= pc.length) ensurePC(pcEnd);                        pc[pcEnd++] = resolvedEntity[ i ];                    }                    hadCharData = true;                    //assert needsMerging == false;                } else {                    if(needsMerging) {                        //assert usePC == false;                        joinPC();  // posEnd is already set correctly!!!                        //posStart = pos  -  1;                        needsMerging = false;                    }                    //no MARKUP not ENTITIES so work on character data ...                    // [14] CharData ::=   [^<&]* - ([^<&]* ']]>' [^<&]*)                    hadCharData = true;                    boolean normalizedCR = false;                    final boolean normalizeInput = tokenize == false || roundtripSupported == false;                    // use loop locality here!!!!                    boolean seenBracket = false;                    boolean seenBracketBracket = false;                    do {                        // check that ]]> does not show in                        if (eventType == XmlPullParser.END_TAG &&                                (ch == ' ' || ch == '\n' || ch == '\t')) {                            // ** ADDED CODE (INCLUDING IF STATEMENT)                            lastHeartbeat = System.currentTimeMillis();;                        }                        if(ch == ']') {                            if(seenBracket) {                                seenBracketBracket = true;                            } else {                                seenBracket = true;                            }                        } else if(seenBracketBracket && ch == '>') {                            throw new XmlPullParserException(                                "characters ]]> are not allowed in content", this, null);                        } else {                            if(seenBracket) {                                seenBracketBracket = seenBracket = false;                            }                            // assert seenTwoBrackets == seenBracket == false;                        }                        if(normalizeInput) {                            // deal with normalization issues ...                            if(ch == '\r') {                                normalizedCR = true;                                posEnd = pos -1;                                // posEnd is alreadys set                                if(!usePC) {                                    if(posEnd > posStart) {                                        joinPC();                                    } else {                                        usePC = true;                                        pcStart = pcEnd = 0;                                    }                                }                                //assert usePC == true;                                if(pcEnd >= pc.length) ensurePC(pcEnd);                                pc[pcEnd++] = '\n';                            } else if(ch == '\n') {                                //   if(!usePC) {  joinPC(); } else { if(pcEnd >= pc.length) ensurePC(); }                                if(!normalizedCR && usePC) {                                    if(pcEnd >= pc.length) ensurePC(pcEnd);                                    pc[pcEnd++] = '\n';                                }                                normalizedCR = false;                            } else {                                if(usePC) {                                    if(pcEnd >= pc.length) ensurePC(pcEnd);                                    pc[pcEnd++] = ch;                                }                                normalizedCR = false;                            }                        }                        ch = more();                    } while(ch != '<' && ch != '&');                    posEnd = pos - 1;                    continue MAIN_LOOP;  // skip ch = more() from below - we are alreayd ahead ...                }                ch = more();            } // endless while(true)        } else {            if(seenRoot) {                return parseEpilog();            } else {                return parseProlog();            }        }    }    /**     * Returns the last time a heartbeat was received. Hearbeats are represented as whitespaces     * or \n characters received when an XmlPullParser.END_TAG was parsed. Note that we     * can falsely detect heartbeats when parsing XHTML content but that is fine.     *     * @return the time in milliseconds when a heartbeat was received.     */    public long getLastHeartbeat() {        return lastHeartbeat;    }    public void resetInput() {        Reader oldReader = reader;        String oldEncoding = inputEncoding;        reset();        reader = oldReader;        inputEncoding = oldEncoding;    }}

⌨️ 快捷键说明

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