/// However, No surrogate support is included in this class.\r
/// This class is currently public. Make it internal after testing completes\r
/// </remarks>\r
- public class XmlConstructs\r
+ internal class XmlConstructs\r
{\r
/** Character flags. */\r
internal static byte[] CHARS = new byte[1 << 16];\r
return (CHARS[c] & VALID) != 0;\r
}\r
\r
+ public static bool IsValid(int c) \r
+ {\r
+ return c > 0 && c < CHARS.Length && (CHARS[c] & VALID) != 0;\r
+ }\r
+\r
/// <summary>\r
/// Returns true if the specified character is invalid.\r
/// </summary>\r
return !IsValid(c);\r
}\r
\r
+ public static bool IsInvalid(int c) \r
+ {\r
+ return !IsValid(c);\r
+ }\r
+\r
/// <summary>\r
/// Returns true if the specified character can be considered content.\r
/// </summary>\r
return (CHARS[c] & CONTENT) != 0;\r
}\r
\r
+ public static bool IsContent(int c) \r
+ {\r
+ return c > 0 && c < CHARS.Length && (CHARS[c] & CONTENT) != 0;\r
+ }\r
+\r
/// <summary>\r
/// Returns true if the specified character can be considered markup.\r
/// Markup characters include '<', '&', and '%'.\r
return c == '<' || c == '&' || c == '%';\r
}\r
\r
+ public static bool IsMarkup(int c) \r
+ {\r
+ return c > 0 && c < CHARS.Length && (c == '<' || c == '&' || c == '%');\r
+ }\r
+\r
/// <summary>\r
/// Returns true if the specified character is a space character\r
/// as defined by production [3] in the XML 1.0 specification. \r
return (CHARS[c] & SPACE) != 0;\r
}\r
\r
+ public static bool IsSpace(int c) \r
+ {\r
+ return c > 0 && c < CHARS.Length && (CHARS[c] & SPACE) != 0;\r
+ }\r
+\r
/// <summary>\r
/// Returns true if the specified character is a valid name start\r
/// character as defined by production [5] in the XML 1.0 specification.\r
return (CHARS[c] & NAME_START) != 0;\r
} \r
\r
+ public static bool IsNameStart(int c) \r
+ {\r
+ return c > 0 && c < CHARS.Length && (CHARS[c] & NAME_START) != 0;\r
+ } \r
+\r
/// <summary>\r
/// Returns true if the specified character is a valid name\r
/// character as defined by production [4] in the XML 1.0 specification.\r
return (CHARS[c] & NAME) != 0;\r
} \r
\r
+ public static bool IsName(int c) \r
+ {\r
+ return c > 0 && c < CHARS.Length && (CHARS[c] & NAME) != 0;\r
+ } \r
+\r
/// <summary>\r
/// Returns true if the specified character is a valid NCName start\r
/// character as defined by production [4] in Namespaces in XML\r
public static bool IsNCNameStart(char c) \r
{\r
return (CHARS[c] & NCNAME_START) != 0;\r
- } \r
+ }\r
+\r
+ public static bool IsNCNameStart(int c) \r
+ {\r
+ return c > 0 && c < CHARS.Length && (CHARS[c] & NCNAME_START) != 0;\r
+ }\r
\r
/// <summary>\r
/// Returns true if the specified character is a valid NCName\r
return (CHARS[c] & NCNAME) != 0;\r
} \r
\r
+ public static bool IsNCName(int c) \r
+ {\r
+ return c > 0 && c < CHARS.Length && (CHARS[c] & NCNAME) != 0;\r
+ } \r
+\r
/// <summary>\r
/// Returns true if the specified character is a valid Pubid\r
/// character as defined by production [13] in the XML 1.0 specification.\r
return (CHARS[c] & PUBID) != 0;\r
}\r
\r
+ public static bool IsPubid(int c) \r
+ {\r
+ return c > 0 && c < CHARS.Length && (CHARS[c] & PUBID) != 0;\r
+ }\r
+\r
/// <summary>\r
/// Check to see if a string is a valid Name according to [5]\r
/// in the XML 1.0 Recommendation\r
return true;\r
}\r
\r
+ public static int IsValidName (string name)\r
+ {\r
+ if (name.Length == 0)\r
+ return 0;\r
+ if (!IsNameStart (name [0]))\r
+ return 0;\r
+ for (int i=1; i<name.Length; i++)\r
+ if (!IsName (name [i]))\r
+ return i;\r
+ return -1;\r
+ }\r
+\r
/// <summary>\r
/// Check to see if a string is a valid NCName according to [4]\r
/// from the XML Namespaces 1.0 Recommendation\r