2003-10-25 Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
[mono.git] / mcs / class / System.XML / System.Xml / XmlConstructs.cs
index 7f23eba5e444b9ffa59d8297609e8d5353084a5f..119a4ffa8185c0965e5d7b78be401df582e443e0 100755 (executable)
@@ -10,7 +10,7 @@ namespace System.Xml
        /// 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
@@ -325,6 +325,11 @@ namespace System.Xml
                        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
@@ -334,6 +339,11 @@ namespace System.Xml
                        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
@@ -343,6 +353,11 @@ namespace System.Xml
                        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 '&lt;', '&amp;', and '%'.\r
@@ -353,6 +368,11 @@ namespace System.Xml
                        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
@@ -364,6 +384,11 @@ namespace System.Xml
                        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
@@ -374,6 +399,11 @@ namespace System.Xml
                        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
@@ -384,6 +414,11 @@ namespace System.Xml
                        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
@@ -394,7 +429,12 @@ namespace System.Xml
                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
@@ -408,6 +448,11 @@ namespace System.Xml
                        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
@@ -418,6 +463,11 @@ namespace System.Xml
                        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
@@ -449,6 +499,18 @@ namespace System.Xml
                        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