xmlentityscanner.java

来自「JAVA的一些源码 JAVA2 STANDARD EDITION DEVELO」· Java 代码 · 共 1,660 行 · 第 1/5 页

JAVA
1,660
字号
                    fCurrentEntity.ch = tmp;                }                else {                    System.arraycopy(fCurrentEntity.ch, offset,                                     fCurrentEntity.ch, 0, length);                }                offset = 0;                if (load(length, false)) {                    break;                }            }        }        int length = fCurrentEntity.position - offset;        fCurrentEntity.columnNumber += length;        // return nmtoken        String symbol = null;        if (length > 0) {            symbol = fSymbolTable.addSymbol(fCurrentEntity.ch, offset, length);        }        if (DEBUG_BUFFER) {            System.out.print(")scanNmtoken: ");            XMLEntityManager.print(fCurrentEntity);            System.out.println(" -> "+String.valueOf(symbol));        }        return symbol;    } // scanNmtoken():String    /**     * Returns a string matching the Name production appearing immediately     * on the input as a symbol, or null if no Name string is present.     * <p>     * <strong>Note:</strong> The Name characters are consumed.     * <p>     * <strong>Note:</strong> The string returned must be a symbol. The     * SymbolTable can be used for this purpose.     *     * @throws IOException  Thrown if i/o error occurs.     * @throws EOFException Thrown on end of file.     *     * @see com.sun.org.apache.xerces.internal.util.SymbolTable     * @see com.sun.org.apache.xerces.internal.util.XMLChar#isName     * @see com.sun.org.apache.xerces.internal.util.XMLChar#isNameStart     */    public String scanName() throws IOException {        if (DEBUG_BUFFER) {            System.out.print("(scanName: ");            XMLEntityManager.print(fCurrentEntity);            System.out.println();        }        // load more characters, if needed        if (fCurrentEntity.position == fCurrentEntity.count) {            load(0, true);        }        // scan name        int offset = fCurrentEntity.position;        if (XMLChar.isNameStart(fCurrentEntity.ch[offset])) {            if (++fCurrentEntity.position == fCurrentEntity.count) {                fCurrentEntity.ch[0] = fCurrentEntity.ch[offset];                offset = 0;                if (load(1, false)) {                    fCurrentEntity.columnNumber++;                    String symbol = fSymbolTable.addSymbol(fCurrentEntity.ch, 0, 1);                    if (DEBUG_BUFFER) {                        System.out.print(")scanName: ");                        XMLEntityManager.print(fCurrentEntity);                        System.out.println(" -> "+String.valueOf(symbol));                    }                    return symbol;                }            }            while (XMLChar.isName(fCurrentEntity.ch[fCurrentEntity.position])) {                if (++fCurrentEntity.position == fCurrentEntity.count) {                    int length = fCurrentEntity.position - offset;                    if (length == fCurrentEntity.ch.length) {                        // bad luck we have to resize our buffer                        char[] tmp = new char[fCurrentEntity.ch.length << 1];                        System.arraycopy(fCurrentEntity.ch, offset,                                         tmp, 0, length);                        fCurrentEntity.ch = tmp;                    }                    else {                        System.arraycopy(fCurrentEntity.ch, offset,                                         fCurrentEntity.ch, 0, length);                    }                    offset = 0;                    if (load(length, false)) {                        break;                    }                }            }        }        int length = fCurrentEntity.position - offset;        fCurrentEntity.columnNumber += length;        // return name        String symbol = null;        if (length > 0) {            symbol = fSymbolTable.addSymbol(fCurrentEntity.ch, offset, length);        }        if (DEBUG_BUFFER) {            System.out.print(")scanName: ");            XMLEntityManager.print(fCurrentEntity);            System.out.println(" -> "+String.valueOf(symbol));        }        return symbol;    } // scanName():String    /**     * Returns a string matching the NCName production appearing immediately     * on the input as a symbol, or null if no NCName string is present.     * <p>     * <strong>Note:</strong> The NCName characters are consumed.     * <p>     * <strong>Note:</strong> The string returned must be a symbol. The     * SymbolTable can be used for this purpose.     *     * @throws IOException  Thrown if i/o error occurs.     * @throws EOFException Thrown on end of file.     *     * @see com.sun.org.apache.xerces.internal.util.SymbolTable     * @see com.sun.org.apache.xerces.internal.util.XMLChar#isNCName     * @see com.sun.org.apache.xerces.internal.util.XMLChar#isNCNameStart     */    public String scanNCName() throws IOException {        if (DEBUG_BUFFER) {            System.out.print("(scanNCName: ");            XMLEntityManager.print(fCurrentEntity);            System.out.println();        }        // load more characters, if needed        if (fCurrentEntity.position == fCurrentEntity.count) {            load(0, true);        }        // scan name        int offset = fCurrentEntity.position;        if (XMLChar.isNCNameStart(fCurrentEntity.ch[offset])) {            if (++fCurrentEntity.position == fCurrentEntity.count) {                fCurrentEntity.ch[0] = fCurrentEntity.ch[offset];                offset = 0;                if (load(1, false)) {                    fCurrentEntity.columnNumber++;                    String symbol = fSymbolTable.addSymbol(fCurrentEntity.ch, 0, 1);                    if (DEBUG_BUFFER) {                        System.out.print(")scanNCName: ");                        XMLEntityManager.print(fCurrentEntity);                        System.out.println(" -> "+String.valueOf(symbol));                    }                    return symbol;                }            }            while (XMLChar.isNCName(fCurrentEntity.ch[fCurrentEntity.position])) {                if (++fCurrentEntity.position == fCurrentEntity.count) {                    int length = fCurrentEntity.position - offset;                    if (length == fCurrentEntity.ch.length) {                        // bad luck we have to resize our buffer                        char[] tmp = new char[fCurrentEntity.ch.length << 1];                        System.arraycopy(fCurrentEntity.ch, offset,                                         tmp, 0, length);                        fCurrentEntity.ch = tmp;                    }                    else {                        System.arraycopy(fCurrentEntity.ch, offset,                                         fCurrentEntity.ch, 0, length);                    }                    offset = 0;                    if (load(length, false)) {                        break;                    }                }            }        }        int length = fCurrentEntity.position - offset;        fCurrentEntity.columnNumber += length;        // return name        String symbol = null;        if (length > 0) {            symbol = fSymbolTable.addSymbol(fCurrentEntity.ch, offset, length);        }        if (DEBUG_BUFFER) {            System.out.print(")scanNCName: ");            XMLEntityManager.print(fCurrentEntity);            System.out.println(" -> "+String.valueOf(symbol));        }        return symbol;    } // scanNCName():String    /**     * Scans a qualified name from the input, setting the fields of the     * QName structure appropriately.     * <p>     * <strong>Note:</strong> The qualified name characters are consumed.     * <p>     * <strong>Note:</strong> The strings used to set the values of the     * QName structure must be symbols. The SymbolTable can be used for     * this purpose.     *     * @param qname The qualified name structure to fill.     *     * @return Returns true if a qualified name appeared immediately on     *         the input and was scanned, false otherwise.     *     * @throws IOException  Thrown if i/o error occurs.     * @throws EOFException Thrown on end of file.     *     * @see com.sun.org.apache.xerces.internal.util.SymbolTable     * @see com.sun.org.apache.xerces.internal.util.XMLChar#isName     * @see com.sun.org.apache.xerces.internal.util.XMLChar#isNameStart     */    public boolean scanQName(QName qname) throws IOException {        if (DEBUG_BUFFER) {            System.out.print("(scanQName, "+qname+": ");            XMLEntityManager.print(fCurrentEntity);            System.out.println();        }        // load more characters, if needed        if (fCurrentEntity.position == fCurrentEntity.count) {            load(0, true);        }        // scan qualified name        int offset = fCurrentEntity.position;        if (XMLChar.isNCNameStart(fCurrentEntity.ch[offset])) {            if (++fCurrentEntity.position == fCurrentEntity.count) {                fCurrentEntity.ch[0] = fCurrentEntity.ch[offset];                offset = 0;                if (load(1, false)) {                    fCurrentEntity.columnNumber++;                    String name =                        fSymbolTable.addSymbol(fCurrentEntity.ch, 0, 1);                    qname.setValues(null, name, name, null);                    if (DEBUG_BUFFER) {                        System.out.print(")scanQName, "+qname+": ");                        XMLEntityManager.print(fCurrentEntity);                        System.out.println(" -> true");                    }                    return true;                }            }            int index = -1;            while (XMLChar.isName(fCurrentEntity.ch[fCurrentEntity.position])) {                char c = fCurrentEntity.ch[fCurrentEntity.position];                if (c == ':') {                    if (index != -1) {                        break;                    }                    index = fCurrentEntity.position;                }                if (++fCurrentEntity.position == fCurrentEntity.count) {                    int length = fCurrentEntity.position - offset;                    if (length == fCurrentEntity.ch.length) {                        // bad luck we have to resize our buffer                        char[] tmp = new char[fCurrentEntity.ch.length << 1];                        System.arraycopy(fCurrentEntity.ch, offset,                                         tmp, 0, length);                        fCurrentEntity.ch = tmp;                    }                    else {                        System.arraycopy(fCurrentEntity.ch, offset,                                         fCurrentEntity.ch, 0, length);                    }                    if (index != -1) {                        index = index - offset;                    }                    offset = 0;                    if (load(length, false)) {                        break;                    }                }            }            int length = fCurrentEntity.position - offset;            fCurrentEntity.columnNumber += length;            if (length > 0) {                String prefix = null;                String localpart = null;                String rawname = fSymbolTable.addSymbol(fCurrentEntity.ch,                                                        offset, length);                if (index != -1) {                    int prefixLength = index - offset;                    prefix = fSymbolTable.addSymbol(fCurrentEntity.ch,                                                    offset, prefixLength);                    int len = length - prefixLength - 1;                    int startLocal = index +1;                    if (!XMLChar.isNCNameStart(fCurrentEntity.ch[startLocal])){                        fErrorReporter.reportError(XMLMessageFormatter.XML_DOMAIN,                                                 "IllegalQName",                                                  null,                                                  XMLErrorReporter.SEVERITY_FATAL_ERROR);                    }                    localpart = fSymbolTable.addSymbol(fCurrentEntity.ch,                                                       startLocal, len);                }                else {                    localpart = rawname;                }                qname.setValues(prefix, localpart, rawname, null);                if (DEBUG_BUFFER) {                    System.out.print(")scanQName, "+qname+": ");                    XMLEntityManager.print(fCurrentEntity);                    System.out.println(" -> true");                }                return true;            }        }        // no qualified name found        if (DEBUG_BUFFER) {            System.out.print(")scanQName, "+qname+": ");            XMLEntityManager.print(fCurrentEntity);            System.out.println(" -> false");        }        return false;    } // scanQName(QName):boolean    /**     * Scans a range of parsed character data, setting the fields of the     * XMLString structure, appropriately.     * <p>     * <strong>Note:</strong> The characters are consumed.     * <p>

⌨️ 快捷键说明

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