19f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/* 29f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Licensed to the Apache Software Foundation (ASF) under one 39f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * or more contributor license agreements. See the NOTICE file 49f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * distributed with this work for additional information 59f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * regarding copyright ownership. The ASF licenses this file 69f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * to you under the Apache License, Version 2.0 (the "License"); 79f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * you may not use this file except in compliance with the License. 89f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * You may obtain a copy of the License at 99f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * http://www.apache.org/licenses/LICENSE-2.0 119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Unless required by applicable law or agreed to in writing, software 139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * distributed under the License is distributed on an "AS IS" BASIS, 149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * See the License for the specific language governing permissions and 169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * limitations under the License. 179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonpackage org.apache.xml.serializer.utils; 209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport java.util.Arrays; 229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/** 249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * THIS IS A COPY OF THE XERCES-2J CLASS org.apache.xerces.utls.XMLChar 259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * This class defines the basic properties of characters in XML 1.1. The data 279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * in this class can be used to verify that a character is a valid 289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * XML 1.1 character or if the character is a space, name start, or name 299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * character. 309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * <p> 319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * A series of convenience methods are supplied to ease the burden 329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * of the developer. Using the character as an index into the <code>XML11CHARS</code> 339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * array and applying the appropriate mask flag (e.g. 349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * <code>MASK_VALID</code>), yields the same results as calling the 359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * convenience methods. There is one exception: check the comments 369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * for the <code>isValid</code> method for details. 379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @author Glenn Marcy, IBM 399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @author Andy Clark, IBM 409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @author Arnaud Le Hors, IBM 419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @author Neil Graham, IBM 429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @author Michael Glavassevich, IBM 439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @version $Id: $ 459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonpublic class XML11Char { 479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // 499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // Constants 509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // 519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** Character flags for XML 1.1. */ 539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private static final byte XML11CHARS [] = new byte [1 << 16]; 549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** XML 1.1 Valid character mask. */ 569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public static final int MASK_XML11_VALID = 0x01; 579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** XML 1.1 Space character mask. */ 599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public static final int MASK_XML11_SPACE = 0x02; 609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** XML 1.1 Name start character mask. */ 629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public static final int MASK_XML11_NAME_START = 0x04; 639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** XML 1.1 Name character mask. */ 659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public static final int MASK_XML11_NAME = 0x08; 669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** XML 1.1 control character mask */ 689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public static final int MASK_XML11_CONTROL = 0x10; 699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** XML 1.1 content for external entities (valid - "special" chars - control chars) */ 719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public static final int MASK_XML11_CONTENT = 0x20; 729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** XML namespaces 1.1 NCNameStart */ 749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public static final int MASK_XML11_NCNAME_START = 0x40; 759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** XML namespaces 1.1 NCName */ 779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public static final int MASK_XML11_NCNAME = 0x80; 789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** XML 1.1 content for internal entities (valid - "special" chars) */ 809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public static final int MASK_XML11_CONTENT_INTERNAL = MASK_XML11_CONTROL | MASK_XML11_CONTENT; 819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // 839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // Static initialization 849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // 859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson static { 879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // Initializing the Character Flag Array 899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // Code generated by: XML11CharGenerator. 909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Arrays.fill(XML11CHARS, 1, 9, (byte) 17 ); // Fill 8 of value (byte) 17 929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XML11CHARS[9] = 35; 939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XML11CHARS[10] = 3; 949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Arrays.fill(XML11CHARS, 11, 13, (byte) 17 ); // Fill 2 of value (byte) 17 959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XML11CHARS[13] = 3; 969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Arrays.fill(XML11CHARS, 14, 32, (byte) 17 ); // Fill 18 of value (byte) 17 979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XML11CHARS[32] = 35; 989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Arrays.fill(XML11CHARS, 33, 38, (byte) 33 ); // Fill 5 of value (byte) 33 999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XML11CHARS[38] = 1; 1009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Arrays.fill(XML11CHARS, 39, 45, (byte) 33 ); // Fill 6 of value (byte) 33 1019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Arrays.fill(XML11CHARS, 45, 47, (byte) -87 ); // Fill 2 of value (byte) -87 1029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XML11CHARS[47] = 33; 1039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Arrays.fill(XML11CHARS, 48, 58, (byte) -87 ); // Fill 10 of value (byte) -87 1049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XML11CHARS[58] = 45; 1059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XML11CHARS[59] = 33; 1069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XML11CHARS[60] = 1; 1079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Arrays.fill(XML11CHARS, 61, 65, (byte) 33 ); // Fill 4 of value (byte) 33 1089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Arrays.fill(XML11CHARS, 65, 91, (byte) -19 ); // Fill 26 of value (byte) -19 1099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Arrays.fill(XML11CHARS, 91, 93, (byte) 33 ); // Fill 2 of value (byte) 33 1109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XML11CHARS[93] = 1; 1119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XML11CHARS[94] = 33; 1129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XML11CHARS[95] = -19; 1139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XML11CHARS[96] = 33; 1149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Arrays.fill(XML11CHARS, 97, 123, (byte) -19 ); // Fill 26 of value (byte) -19 1159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Arrays.fill(XML11CHARS, 123, 127, (byte) 33 ); // Fill 4 of value (byte) 33 1169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Arrays.fill(XML11CHARS, 127, 133, (byte) 17 ); // Fill 6 of value (byte) 17 1179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XML11CHARS[133] = 35; 1189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Arrays.fill(XML11CHARS, 134, 160, (byte) 17 ); // Fill 26 of value (byte) 17 1199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Arrays.fill(XML11CHARS, 160, 183, (byte) 33 ); // Fill 23 of value (byte) 33 1209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XML11CHARS[183] = -87; 1219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Arrays.fill(XML11CHARS, 184, 192, (byte) 33 ); // Fill 8 of value (byte) 33 1229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Arrays.fill(XML11CHARS, 192, 215, (byte) -19 ); // Fill 23 of value (byte) -19 1239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XML11CHARS[215] = 33; 1249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Arrays.fill(XML11CHARS, 216, 247, (byte) -19 ); // Fill 31 of value (byte) -19 1259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XML11CHARS[247] = 33; 1269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Arrays.fill(XML11CHARS, 248, 768, (byte) -19 ); // Fill 520 of value (byte) -19 1279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Arrays.fill(XML11CHARS, 768, 880, (byte) -87 ); // Fill 112 of value (byte) -87 1289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Arrays.fill(XML11CHARS, 880, 894, (byte) -19 ); // Fill 14 of value (byte) -19 1299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XML11CHARS[894] = 33; 1309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Arrays.fill(XML11CHARS, 895, 8192, (byte) -19 ); // Fill 7297 of value (byte) -19 1319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Arrays.fill(XML11CHARS, 8192, 8204, (byte) 33 ); // Fill 12 of value (byte) 33 1329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Arrays.fill(XML11CHARS, 8204, 8206, (byte) -19 ); // Fill 2 of value (byte) -19 1339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Arrays.fill(XML11CHARS, 8206, 8232, (byte) 33 ); // Fill 26 of value (byte) 33 1349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XML11CHARS[8232] = 35; 1359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Arrays.fill(XML11CHARS, 8233, 8255, (byte) 33 ); // Fill 22 of value (byte) 33 1369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Arrays.fill(XML11CHARS, 8255, 8257, (byte) -87 ); // Fill 2 of value (byte) -87 1379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Arrays.fill(XML11CHARS, 8257, 8304, (byte) 33 ); // Fill 47 of value (byte) 33 1389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Arrays.fill(XML11CHARS, 8304, 8592, (byte) -19 ); // Fill 288 of value (byte) -19 1399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Arrays.fill(XML11CHARS, 8592, 11264, (byte) 33 ); // Fill 2672 of value (byte) 33 1409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Arrays.fill(XML11CHARS, 11264, 12272, (byte) -19 ); // Fill 1008 of value (byte) -19 1419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Arrays.fill(XML11CHARS, 12272, 12289, (byte) 33 ); // Fill 17 of value (byte) 33 1429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Arrays.fill(XML11CHARS, 12289, 55296, (byte) -19 ); // Fill 43007 of value (byte) -19 1439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Arrays.fill(XML11CHARS, 57344, 63744, (byte) 33 ); // Fill 6400 of value (byte) 33 1449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Arrays.fill(XML11CHARS, 63744, 64976, (byte) -19 ); // Fill 1232 of value (byte) -19 1459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Arrays.fill(XML11CHARS, 64976, 65008, (byte) 33 ); // Fill 32 of value (byte) 33 1469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Arrays.fill(XML11CHARS, 65008, 65534, (byte) -19 ); // Fill 526 of value (byte) -19 1479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } // <clinit>() 1499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // 1519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // Public static methods 1529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // 1539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Returns true if the specified character is a space character 1569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * as amdended in the XML 1.1 specification. 1579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 1589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param c The character to check. 1599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public static boolean isXML11Space(int c) { 1619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return (c < 0x10000 && (XML11CHARS[c] & MASK_XML11_SPACE) != 0); 1629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } // isXML11Space(int):boolean 1639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Returns true if the specified character is valid. This method 1669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * also checks the surrogate character range from 0x10000 to 0x10FFFF. 1679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * <p> 1689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * If the program chooses to apply the mask directly to the 1699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * <code>XML11CHARS</code> array, then they are responsible for checking 1709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * the surrogate character range. 1719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 1729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param c The character to check. 1739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public static boolean isXML11Valid(int c) { 1759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return (c < 0x10000 && (XML11CHARS[c] & MASK_XML11_VALID) != 0) 1769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson || (0x10000 <= c && c <= 0x10FFFF); 1779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } // isXML11Valid(int):boolean 1789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Returns true if the specified character is invalid. 1819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 1829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param c The character to check. 1839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public static boolean isXML11Invalid(int c) { 1859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return !isXML11Valid(c); 1869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } // isXML11Invalid(int):boolean 1879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Returns true if the specified character is valid and permitted outside 1909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * of a character reference. 1919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * That is, this method will return false for the same set as 1929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * isXML11Valid, except it also reports false for "control characters". 1939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 1949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param c The character to check. 1959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public static boolean isXML11ValidLiteral(int c) { 1979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return ((c < 0x10000 && ((XML11CHARS[c] & MASK_XML11_VALID) != 0 && (XML11CHARS[c] & MASK_XML11_CONTROL) == 0)) 1989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson || (0x10000 <= c && c <= 0x10FFFF)); 1999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } // isXML11ValidLiteral(int):boolean 2009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 2029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Returns true if the specified character can be considered 2039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * content in an external parsed entity. 2049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 2059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param c The character to check. 2069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 2079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public static boolean isXML11Content(int c) { 2089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return (c < 0x10000 && (XML11CHARS[c] & MASK_XML11_CONTENT) != 0) || 2099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson (0x10000 <= c && c <= 0x10FFFF); 2109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } // isXML11Content(int):boolean 2119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 2139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Returns true if the specified character can be considered 2149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * content in an internal parsed entity. 2159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 2169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param c The character to check. 2179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 2189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public static boolean isXML11InternalEntityContent(int c) { 2199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return (c < 0x10000 && (XML11CHARS[c] & MASK_XML11_CONTENT_INTERNAL) != 0) || 2209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson (0x10000 <= c && c <= 0x10FFFF); 2219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } // isXML11InternalEntityContent(int):boolean 2229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 2249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Returns true if the specified character is a valid name start 2259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * character as defined by production [4] in the XML 1.1 2269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * specification. 2279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 2289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param c The character to check. 2299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 2309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public static boolean isXML11NameStart(int c) { 2319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return (c < 0x10000 && (XML11CHARS[c] & MASK_XML11_NAME_START) != 0) 2329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson || (0x10000 <= c && c < 0xF0000); 2339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } // isXML11NameStart(int):boolean 2349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 2369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Returns true if the specified character is a valid name 2379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * character as defined by production [4a] in the XML 1.1 2389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * specification. 2399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 2409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param c The character to check. 2419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 2429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public static boolean isXML11Name(int c) { 2439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return (c < 0x10000 && (XML11CHARS[c] & MASK_XML11_NAME) != 0) 2449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson || (c >= 0x10000 && c < 0xF0000); 2459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } // isXML11Name(int):boolean 2469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 2489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Returns true if the specified character is a valid NCName start 2499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * character as defined by production [4] in Namespaces in XML 2509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 1.1 recommendation. 2519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 2529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param c The character to check. 2539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 2549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public static boolean isXML11NCNameStart(int c) { 2559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return (c < 0x10000 && (XML11CHARS[c] & MASK_XML11_NCNAME_START) != 0) 2569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson || (0x10000 <= c && c < 0xF0000); 2579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } // isXML11NCNameStart(int):boolean 2589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 2609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Returns true if the specified character is a valid NCName 2619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * character as defined by production [5] in Namespaces in XML 2629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 1.1 recommendation. 2639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 2649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param c The character to check. 2659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 2669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public static boolean isXML11NCName(int c) { 2679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return (c < 0x10000 && (XML11CHARS[c] & MASK_XML11_NCNAME) != 0) 2689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson || (0x10000 <= c && c < 0xF0000); 2699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } // isXML11NCName(int):boolean 2709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 2729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Returns whether the given character is a valid 2739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * high surrogate for a name character. This includes 2749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * all high surrogates for characters [0x10000-0xEFFFF]. 2759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * In other words everything excluding planes 15 and 16. 2769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 2779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param c The character to check. 2789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 2799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public static boolean isXML11NameHighSurrogate(int c) { 2809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return (0xD800 <= c && c <= 0xDB7F); 2819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /* 2849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * [5] Name ::= NameStartChar NameChar* 2859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 2869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 2879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Check to see if a string is a valid Name according to [5] 2889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * in the XML 1.1 Recommendation 2899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 2909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param name string to check 2919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return true if name is a valid Name 2929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 2939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public static boolean isXML11ValidName(String name) { 2949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson int length = name.length(); 2959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (length == 0) 2969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return false; 2979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson int i = 1; 2989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson char ch = name.charAt(0); 2999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if( !isXML11NameStart(ch) ) { 3009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if ( length > 1 && isXML11NameHighSurrogate(ch) ) { 3019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson char ch2 = name.charAt(1); 3029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if ( !XMLChar.isLowSurrogate(ch2) || 3039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson !isXML11NameStart(XMLChar.supplemental(ch, ch2)) ) { 3049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return false; 3059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson i = 2; 3079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else { 3099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return false; 3109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson while (i < length) { 3139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson ch = name.charAt(i); 3149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if ( !isXML11Name(ch) ) { 3159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if ( ++i < length && isXML11NameHighSurrogate(ch) ) { 3169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson char ch2 = name.charAt(i); 3179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if ( !XMLChar.isLowSurrogate(ch2) || 3189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson !isXML11Name(XMLChar.supplemental(ch, ch2)) ) { 3199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return false; 3209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else { 3239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return false; 3249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson ++i; 3279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return true; 3299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } // isXML11ValidName(String):boolean 3309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /* 3339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * from the namespace 1.1 rec 3349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * [4] NCName ::= NCNameStartChar NCNameChar* 3359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 3369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 3379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Check to see if a string is a valid NCName according to [4] 3389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * from the XML Namespaces 1.1 Recommendation 3399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 3409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param ncName string to check 3419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return true if name is a valid NCName 3429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 3439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public static boolean isXML11ValidNCName(String ncName) { 3449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson int length = ncName.length(); 3459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (length == 0) 3469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return false; 3479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson int i = 1; 3489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson char ch = ncName.charAt(0); 3499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if( !isXML11NCNameStart(ch) ) { 3509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if ( length > 1 && isXML11NameHighSurrogate(ch) ) { 3519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson char ch2 = ncName.charAt(1); 3529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if ( !XMLChar.isLowSurrogate(ch2) || 3539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson !isXML11NCNameStart(XMLChar.supplemental(ch, ch2)) ) { 3549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return false; 3559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson i = 2; 3579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else { 3599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return false; 3609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson while (i < length) { 3639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson ch = ncName.charAt(i); 3649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if ( !isXML11NCName(ch) ) { 3659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if ( ++i < length && isXML11NameHighSurrogate(ch) ) { 3669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson char ch2 = ncName.charAt(i); 3679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if ( !XMLChar.isLowSurrogate(ch2) || 3689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson !isXML11NCName(XMLChar.supplemental(ch, ch2)) ) { 3699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return false; 3709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else { 3739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return false; 3749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson ++i; 3779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return true; 3799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } // isXML11ValidNCName(String):boolean 3809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /* 3829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * [7] Nmtoken ::= (NameChar)+ 3839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 3849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 3859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Check to see if a string is a valid Nmtoken according to [7] 3869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * in the XML 1.1 Recommendation 3879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 3889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param nmtoken string to check 3899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return true if nmtoken is a valid Nmtoken 3909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 3919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public static boolean isXML11ValidNmtoken(String nmtoken) { 3929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson int length = nmtoken.length(); 3939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (length == 0) 3949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return false; 3959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson for (int i = 0; i < length; ++i ) { 3969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson char ch = nmtoken.charAt(i); 3979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if( !isXML11Name(ch) ) { 3989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if ( ++i < length && isXML11NameHighSurrogate(ch) ) { 3999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson char ch2 = nmtoken.charAt(i); 4009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if ( !XMLChar.isLowSurrogate(ch2) || 4019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson !isXML11Name(XMLChar.supplemental(ch, ch2)) ) { 4029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return false; 4039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 4049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 4059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else { 4069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return false; 4079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 4089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 4099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 4109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return true; 4119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } // isXML11ValidName(String):boolean 4129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson} // class XML11Char 4149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 415