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 + -
显示快捷键?