* roottypes.cs: Rename from tree.cs.
[mono.git] / mcs / class / System.XML / System.Xml.Schema / XmlSchemaDatatype.cs
old mode 100755 (executable)
new mode 100644 (file)
index e848a0c..751560d
@@ -5,6 +5,27 @@
 //     Dwivedi, Ajay kumar <Adwiv@Yahoo.com>\r
 //     Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>\r
 //\r
+
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
 using System;\r
 using System.Collections;\r
 using System.Text;\r
@@ -27,16 +48,66 @@ namespace System.Xml.Schema
                        get { return WhitespaceValue; }\r
                }\r
 \r
+#if NET_2_0\r
+               public virtual XmlTypeCode TypeCode {\r
+                       // Actually no way to verify default value, since\r
+                       // in .NET 2.0 it cannot be derived externally anymore.\r
+                       get { return XmlTypeCode.None; }\r
+               }\r
+\r
+               public virtual XmlSchemaDatatypeVariety Variety {\r
+                       get {\r
+                               return XmlSchemaDatatypeVariety.Atomic;\r
+                       }\r
+               }\r
+#endif\r
+\r
                public abstract XmlTokenizedType TokenizedType {  get; }\r
                public abstract Type ValueType {  get; }\r
 \r
                // Methods\r
+#if NET_2_0\r
+               [MonoTODO]\r
+               public virtual object ChangeType (object value, Type targetType)\r
+               {\r
+                       return ChangeType (value, targetType, null);\r
+               }\r
+\r
+               [MonoTODO]\r
+               public virtual object ChangeType (object value, Type targetType, IXmlNamespaceResolver nsResolver)\r
+               {\r
+                       throw new NotImplementedException ();\r
+               }\r
+\r
+               public virtual bool IsDerivedFrom (XmlSchemaDatatype datatype)\r
+               {\r
+                       // It is documented to return always false, but\r
+                       // actually returns true when the argument is for\r
+                       // the same type (and it does not check null argument).\r
+                       return this == datatype;\r
+               }\r
+#endif\r
+\r
+#if NET_2_0\r
                public abstract object ParseValue (string s, \r
-                       XmlNameTable nameTable, XmlNamespaceManager nsmgr);\r
+                       XmlNameTable nameTable, IXmlNamespaceResolver nsmgr);\r
 \r
-               internal abstract ValueType ParseValueType (string s,\r
+               internal virtual ValueType ParseValueType (string s,\r
+                       XmlNameTable nameTable, IXmlNamespaceResolver nsmgr)\r
+               {\r
+                       return null;\r
+               }\r
+#else\r
+               public abstract object ParseValue (string s, \r
                        XmlNameTable nameTable, XmlNamespaceManager nsmgr);\r
 \r
+               internal virtual ValueType ParseValueType (string s,\r
+                       XmlNameTable nameTable, XmlNamespaceManager nsmgr)\r
+               {\r
+                       return null;\r
+               }\r
+#endif\r
+\r
                static char [] wsChars = new char [] {' ', '\t', '\n', '\r'};\r
 \r
                StringBuilder sb = new StringBuilder ();\r
@@ -47,14 +118,19 @@ namespace System.Xml.Schema
 \r
                internal string Normalize (string s, XsdWhitespaceFacet whitespaceFacet)\r
                {\r
+                       int idx = s.IndexOfAny (wsChars);\r
+                       if (idx < 0)\r
+                               return s;\r
                        switch (whitespaceFacet) {\r
                        case XsdWhitespaceFacet.Collapse:\r
                                string [] arr = s.Trim ().Split (wsChars);\r
-                               foreach (string one in arr)\r
+                               for (int i = 0; i < arr.Length; i++) {\r
+                                       string one = arr [i];\r
                                        if (one != "") {\r
                                                sb.Append (one);\r
                                                sb.Append (" ");\r
                                        }\r
+                               }\r
                                string result = sb.ToString ();\r
                                sb.Length = 0;\r
                                return result.Trim ();\r
@@ -69,11 +145,6 @@ namespace System.Xml.Schema
                                                sb [i] = ' ';\r
                                                break;\r
                                        }\r
-                               /*\r
-                               sb.Replace ('\r', ' ');\r
-                               sb.Replace ('\n', ' ');\r
-                               sb.Replace ('\t', ' ');\r
-                               */\r
                                result = sb.ToString ();\r
                                sb.Length = 0;\r
                                return result;\r
@@ -84,13 +155,33 @@ namespace System.Xml.Schema
 \r
                internal static XmlSchemaDatatype FromName (XmlQualifiedName qname)\r
                {\r
-                       if (qname.Namespace != XmlSchema.Namespace)\r
-                               throw new InvalidOperationException ("Namespace " + XmlSchema.Namespace + " is required.");\r
-                       return FromName (qname.Name);\r
+                       return FromName (qname.Name, qname.Namespace);\r
                }\r
 \r
-               internal static XmlSchemaDatatype FromName (string localName)\r
+               internal static XmlSchemaDatatype FromName (string localName, string ns)\r
                {\r
+                       switch (ns) {\r
+                       case XmlSchema.Namespace:\r
+                               break;\r
+#if NET_2_0\r
+                       case XmlSchema.XdtNamespace:\r
+                               switch (localName) {\r
+                               case "anyAtomicType":\r
+                                       return datatypeAnyAtomicType;\r
+                               case "untypedAtomic":\r
+                                       return datatypeUntypedAtomic;\r
+                               case "dayTimeDuration":\r
+                                       return datatypeDayTimeDuration;\r
+                               case "yearMonthDuration":\r
+                                       return datatypeYearMonthDuration;\r
+                               }\r
+                               return null;\r
+#endif\r
+                       default:\r
+                               // Maybe invalid name was specified. In such cases, let processors handle them.\r
+                               return null;\r
+                       }\r
+\r
                        switch (localName) {\r
                        case "anySimpleType":\r
                                return datatypeAnySimpleType;\r
@@ -188,50 +279,61 @@ namespace System.Xml.Schema
                        }\r
                }\r
 \r
-               private static XsdAnySimpleType datatypeAnySimpleType = new XsdAnySimpleType ();\r
-               private static XsdString datatypeString = new XsdString ();\r
-               private static XsdNormalizedString datatypeNormalizedString = new XsdNormalizedString ();\r
-               private static XsdToken datatypeToken = new XsdToken ();\r
-               private static XsdLanguage datatypeLanguage = new XsdLanguage ();\r
-               private static XsdNMToken datatypeNMToken = new XsdNMToken ();\r
-               private static XsdNMTokens datatypeNMTokens = new XsdNMTokens ();\r
-               private static XsdName datatypeName = new XsdName ();\r
-               private static XsdNCName datatypeNCName = new XsdNCName ();\r
-               private static XsdID datatypeID = new XsdID ();\r
-               private static XsdIDRef datatypeIDRef = new XsdIDRef ();\r
-               private static XsdIDRefs datatypeIDRefs = new XsdIDRefs ();\r
-               private static XsdEntity datatypeEntity = new XsdEntity ();\r
-               private static XsdEntities datatypeEntities = new XsdEntities ();\r
-               private static XsdNotation datatypeNotation = new XsdNotation ();\r
-               private static XsdDecimal datatypeDecimal = new XsdDecimal ();\r
-               private static XsdInteger datatypeInteger = new XsdInteger ();\r
-               private static XsdLong datatypeLong = new XsdLong ();\r
-               private static XsdInt datatypeInt = new XsdInt ();\r
-               private static XsdShort datatypeShort = new XsdShort ();\r
-               private static XsdByte datatypeByte = new XsdByte ();\r
-               private static XsdNonNegativeInteger datatypeNonNegativeInteger = new XsdNonNegativeInteger ();\r
-               private static XsdPositiveInteger datatypePositiveInteger = new XsdPositiveInteger ();\r
-               private static XsdUnsignedLong datatypeUnsignedLong = new XsdUnsignedLong ();\r
-               private static XsdUnsignedInt datatypeUnsignedInt = new XsdUnsignedInt ();\r
-               private static XsdUnsignedShort datatypeUnsignedShort = new XsdUnsignedShort ();\r
-               private static XsdUnsignedByte datatypeUnsignedByte = new XsdUnsignedByte ();\r
-               private static XsdNonPositiveInteger datatypeNonPositiveInteger = new XsdNonPositiveInteger ();\r
-               private static XsdNegativeInteger datatypeNegativeInteger = new XsdNegativeInteger ();\r
-               private static XsdFloat datatypeFloat = new XsdFloat ();\r
-               private static XsdDouble datatypeDouble = new XsdDouble ();\r
-               private static XsdBase64Binary datatypeBase64Binary = new XsdBase64Binary ();\r
-               private static XsdBoolean datatypeBoolean = new XsdBoolean ();\r
-               private static XsdAnyURI datatypeAnyURI = new XsdAnyURI ();\r
-               private static XsdDuration datatypeDuration = new XsdDuration ();\r
-               private static XsdDateTime datatypeDateTime = new XsdDateTime ();\r
-               private static XsdDate datatypeDate = new XsdDate ();\r
-               private static XsdTime datatypeTime = new XsdTime ();\r
-               private static XsdHexBinary datatypeHexBinary = new XsdHexBinary ();\r
-               private static XsdQName datatypeQName = new XsdQName ();\r
-               private static XsdGYearMonth datatypeGYearMonth = new XsdGYearMonth ();\r
-               private static XsdGMonthDay datatypeGMonthDay = new XsdGMonthDay ();\r
-               private static XsdGYear datatypeGYear = new XsdGYear ();\r
-               private static XsdGMonth datatypeGMonth = new XsdGMonth ();\r
-               private static XsdGDay datatypeGDay = new XsdGDay ();\r
+               static readonly XsdAnySimpleType datatypeAnySimpleType = new XsdAnySimpleType ();\r
+               static readonly XsdString datatypeString = new XsdString ();\r
+               static readonly XsdNormalizedString datatypeNormalizedString = new XsdNormalizedString ();\r
+               static readonly XsdToken datatypeToken = new XsdToken ();\r
+               static readonly XsdLanguage datatypeLanguage = new XsdLanguage ();\r
+               static readonly XsdNMToken datatypeNMToken = new XsdNMToken ();\r
+               static readonly XsdNMTokens datatypeNMTokens = new XsdNMTokens ();\r
+               static readonly XsdName datatypeName = new XsdName ();\r
+               static readonly XsdNCName datatypeNCName = new XsdNCName ();\r
+               static readonly XsdID datatypeID = new XsdID ();\r
+               static readonly XsdIDRef datatypeIDRef = new XsdIDRef ();\r
+               static readonly XsdIDRefs datatypeIDRefs = new XsdIDRefs ();\r
+               static readonly XsdEntity datatypeEntity = new XsdEntity ();\r
+               static readonly XsdEntities datatypeEntities = new XsdEntities ();\r
+               static readonly XsdNotation datatypeNotation = new XsdNotation ();\r
+               static readonly XsdDecimal datatypeDecimal = new XsdDecimal ();\r
+               static readonly XsdInteger datatypeInteger = new XsdInteger ();\r
+               static readonly XsdLong datatypeLong = new XsdLong ();\r
+               static readonly XsdInt datatypeInt = new XsdInt ();\r
+               static readonly XsdShort datatypeShort = new XsdShort ();\r
+               static readonly XsdByte datatypeByte = new XsdByte ();\r
+               static readonly XsdNonNegativeInteger datatypeNonNegativeInteger = new XsdNonNegativeInteger ();\r
+               static readonly XsdPositiveInteger datatypePositiveInteger = new XsdPositiveInteger ();\r
+               static readonly XsdUnsignedLong datatypeUnsignedLong = new XsdUnsignedLong ();\r
+               static readonly XsdUnsignedInt datatypeUnsignedInt = new XsdUnsignedInt ();\r
+               static readonly XsdUnsignedShort datatypeUnsignedShort = new XsdUnsignedShort ();\r
+               static readonly XsdUnsignedByte datatypeUnsignedByte = new XsdUnsignedByte ();\r
+               static readonly XsdNonPositiveInteger datatypeNonPositiveInteger = new XsdNonPositiveInteger ();\r
+               static readonly XsdNegativeInteger datatypeNegativeInteger = new XsdNegativeInteger ();\r
+               static readonly XsdFloat datatypeFloat = new XsdFloat ();\r
+               static readonly XsdDouble datatypeDouble = new XsdDouble ();\r
+               static readonly XsdBase64Binary datatypeBase64Binary = new XsdBase64Binary ();\r
+               static readonly XsdBoolean datatypeBoolean = new XsdBoolean ();\r
+               static readonly XsdAnyURI datatypeAnyURI = new XsdAnyURI ();\r
+               static readonly XsdDuration datatypeDuration = new XsdDuration ();\r
+               static readonly XsdDateTime datatypeDateTime = new XsdDateTime ();\r
+               static readonly XsdDate datatypeDate = new XsdDate ();\r
+               static readonly XsdTime datatypeTime = new XsdTime ();\r
+               static readonly XsdHexBinary datatypeHexBinary = new XsdHexBinary ();\r
+               static readonly XsdQName datatypeQName = new XsdQName ();\r
+               static readonly XsdGYearMonth datatypeGYearMonth = new XsdGYearMonth ();\r
+               static readonly XsdGMonthDay datatypeGMonthDay = new XsdGMonthDay ();\r
+               static readonly XsdGYear datatypeGYear = new XsdGYear ();\r
+               static readonly XsdGMonth datatypeGMonth = new XsdGMonth ();\r
+               static readonly XsdGDay datatypeGDay = new XsdGDay ();\r
+#if NET_2_0\r
+               static readonly XdtAnyAtomicType datatypeAnyAtomicType\r
+                       = new XdtAnyAtomicType ();\r
+               static readonly XdtUntypedAtomic datatypeUntypedAtomic\r
+                       = new XdtUntypedAtomic ();\r
+               static readonly XdtDayTimeDuration datatypeDayTimeDuration\r
+                       = new XdtDayTimeDuration ();\r
+               static readonly XdtYearMonthDuration datatypeYearMonthDuration\r
+                       = new XdtYearMonthDuration ();\r
+#endif\r
+\r
        }\r
 }