xml11char.java

来自「JAVA 所有包」· Java 代码 · 共 431 行 · 第 1/2 页

JAVA
431
字号
     * Returns true if the specified character is a valid name start     * character as defined by production [4] in the XML 1.1     * specification.     *     * @param c The character to check.     */    public static boolean isXML11NameStart(int c) {        return (c < 0x10000 && (XML11CHARS[c] & MASK_XML11_NAME_START) != 0)            || (0x10000 <= c && c < 0xF0000);    } // isXML11NameStart(int):boolean    /**     * Returns true if the specified character is a valid name     * character as defined by production [4a] in the XML 1.1     * specification.     *     * @param c The character to check.     */    public static boolean isXML11Name(int c) {        return (c < 0x10000 && (XML11CHARS[c] & MASK_XML11_NAME) != 0)             || (c >= 0x10000 && c < 0xF0000);    } // isXML11Name(int):boolean    /**     * Returns true if the specified character is a valid NCName start     * character as defined by production [4] in Namespaces in XML     * 1.1 recommendation.     *     * @param c The character to check.     */    public static boolean isXML11NCNameStart(int c) {        return (c < 0x10000 && (XML11CHARS[c] & MASK_XML11_NCNAME_START) != 0)            || (0x10000 <= c && c < 0xF0000);    } // isXML11NCNameStart(int):boolean    /**     * Returns true if the specified character is a valid NCName     * character as defined by production [5] in Namespaces in XML     * 1.1 recommendation.     *     * @param c The character to check.     */    public static boolean isXML11NCName(int c) {        return (c < 0x10000 && (XML11CHARS[c] & MASK_XML11_NCNAME) != 0)            || (0x10000 <= c && c < 0xF0000);    } // isXML11NCName(int):boolean        /**     * Returns whether the given character is a valid      * high surrogate for a name character. This includes     * all high surrogates for characters [0x10000-0xEFFFF].     * In other words everything excluding planes 15 and 16.     *     * @param c The character to check.     */    public static boolean isXML11NameHighSurrogate(int c) {        return (0xD800 <= c && c <= 0xDB7F);    }    /*     * [5] Name ::= NameStartChar NameChar*     */    /**     * Check to see if a string is a valid Name according to [5]     * in the XML 1.1 Recommendation     *     * @param name string to check     * @return true if name is a valid Name     */    public static boolean isXML11ValidName(String name) {        int length = name.length();        if (length == 0)            return false;        int i = 1;        char ch = name.charAt(0);        if( !isXML11NameStart(ch) ) {            if ( length > 1 && isXML11NameHighSurrogate(ch) ) {                char ch2 = name.charAt(1);                if ( !XMLChar.isLowSurrogate(ch2) ||                      !isXML11NameStart(XMLChar.supplemental(ch, ch2)) ) {                    return false;                }                i = 2;            }            else {                return false;            }        }        while (i < length) {            ch = name.charAt(i);            if ( !isXML11Name(ch) ) {                if ( ++i < length && isXML11NameHighSurrogate(ch) ) {                    char ch2 = name.charAt(i);                    if ( !XMLChar.isLowSurrogate(ch2) ||                          !isXML11Name(XMLChar.supplemental(ch, ch2)) ) {                        return false;                    }                }                else {                    return false;                }            }            ++i;        }        return true;    } // isXML11ValidName(String):boolean        /*     * from the namespace 1.1 rec     * [4] NCName ::= NCNameStartChar NCNameChar*     */    /**     * Check to see if a string is a valid NCName according to [4]     * from the XML Namespaces 1.1 Recommendation     *     * @param ncName string to check     * @return true if name is a valid NCName     */    public static boolean isXML11ValidNCName(String ncName) {        int length = ncName.length();        if (length == 0)            return false;        int i = 1;        char ch = ncName.charAt(0);        if( !isXML11NCNameStart(ch) ) {            if ( length > 1 && isXML11NameHighSurrogate(ch) ) {                char ch2 = ncName.charAt(1);                if ( !XMLChar.isLowSurrogate(ch2) ||                      !isXML11NCNameStart(XMLChar.supplemental(ch, ch2)) ) {                    return false;                }                i = 2;            }            else {                return false;            }        }        while (i < length) {            ch = ncName.charAt(i);            if ( !isXML11NCName(ch) ) {                if ( ++i < length && isXML11NameHighSurrogate(ch) ) {                    char ch2 = ncName.charAt(i);                    if ( !XMLChar.isLowSurrogate(ch2) ||                          !isXML11NCName(XMLChar.supplemental(ch, ch2)) ) {                        return false;                    }                }                else {                    return false;                }            }            ++i;        }        return true;    } // isXML11ValidNCName(String):boolean    /*     * [7] Nmtoken ::= (NameChar)+     */    /**     * Check to see if a string is a valid Nmtoken according to [7]     * in the XML 1.1 Recommendation     *     * @param nmtoken string to check     * @return true if nmtoken is a valid Nmtoken      */    public static boolean isXML11ValidNmtoken(String nmtoken) {        int length = nmtoken.length();        if (length == 0)            return false;        for (int i = 0; i < length; ++i ) {            char ch = nmtoken.charAt(i);            if( !isXML11Name(ch) ) {                if ( ++i < length && isXML11NameHighSurrogate(ch) ) {                    char ch2 = nmtoken.charAt(i);                    if ( !XMLChar.isLowSurrogate(ch2) ||                          !isXML11Name(XMLChar.supplemental(ch, ch2)) ) {                        return false;                    }                }                else {                    return false;                }            }        }        return true;    } // isXML11ValidName(String):boolean        /**      * Simple check to determine if qname is legal. If it returns false      * then <param>str</param> is illegal; if it returns true then       * <param>str</param> is legal.      */     public static boolean isXML11ValidQName(String str) {        final int colon = str.indexOf(':');        if (colon == 0 || colon == str.length() - 1) {            return false;        }               if (colon > 0) {            final String prefix = str.substring(0,colon);            final String localPart = str.substring(colon+1);            return isXML11ValidNCName(prefix) && isXML11ValidNCName(localPart);        }        else {            return isXML11ValidNCName(str);        }     }} // class XML11Char

⌨️ 快捷键说明

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