2003-07-19 Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
[mono.git] / mcs / class / System.XML / System.Xml.Schema / XmlSchemaDatatype.cs
1 //\r
2 // System.Xml.Schema.XmlSchemaDatatype.cs\r
3 //\r
4 // Authors:\r
5 //      Dwivedi, Ajay kumar <Adwiv@Yahoo.com>\r
6 //      Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>\r
7 //\r
8 using System;\r
9 using System.Collections;\r
10 using System.Text;\r
11 using System.Xml;\r
12 using Mono.Xml.Schema;\r
13 \r
14 namespace System.Xml.Schema\r
15 {\r
16         public abstract class XmlSchemaDatatype\r
17         {\r
18                 protected XmlSchemaDatatype()\r
19                 {\r
20                 }\r
21                 \r
22                 internal XsdWhitespaceFacet WhitespaceValue =\r
23                         XsdWhitespaceFacet.Preserve;\r
24 \r
25                 // Common Facets\r
26                 public virtual XsdWhitespaceFacet Whitespace {\r
27                         get { return WhitespaceValue; }\r
28                 }\r
29 \r
30                 public abstract XmlTokenizedType TokenizedType {  get; }\r
31                 public abstract Type ValueType {  get; }\r
32 \r
33                 // Methods\r
34                 public abstract object ParseValue (string s, \r
35                         XmlNameTable nameTable, XmlNamespaceManager nsmgr);\r
36 \r
37                 char [] wsChars = new char [] {' ', '\t', '\n', '\r'};\r
38 \r
39                 protected string Normalize (string s)\r
40                 {\r
41                         switch (Whitespace) {\r
42                         case XsdWhitespaceFacet.Collapse:\r
43                                 return String.Join (" ", s.Trim ().Split (wsChars));\r
44                         case XsdWhitespaceFacet.Replace:\r
45                                 StringBuilder sb = new StringBuilder (s);\r
46                                 sb.Replace ('\r', ' ');\r
47                                 sb.Replace ('\n', ' ');\r
48                                 sb.Replace ('\t', ' ');\r
49                                 string result = sb.ToString ();\r
50                                 sb.Length = 0;\r
51                                 return result;\r
52                         default:\r
53                                 return s;\r
54                         }\r
55                 }\r
56 \r
57                 //TODO: This should return all appropriate inbuilt type\r
58                 internal static XmlSchemaDatatype FromName (XmlQualifiedName qname)\r
59                 {\r
60                         if (qname.Namespace != XmlSchema.Namespace)\r
61                                 throw new InvalidOperationException ("Namespace " + XmlSchema.Namespace + " is required.");\r
62                         return FromName (qname.Name);\r
63                 }\r
64 \r
65                 //TODO: This should return all appropriate inbuilt type\r
66                 internal static XmlSchemaDatatype FromName (string localName)\r
67                 {\r
68                         switch (localName) {\r
69                         case "string":\r
70                                 return datatypeString;\r
71                         case "normalizedString":\r
72                                 return datatypeNormalizedString;\r
73                         case "token":\r
74                                 return datatypeToken;\r
75                         case "language":\r
76                                 return datatypeLanguage;\r
77                         case "NMTOKEN":\r
78                                 return datatypeNMToken;\r
79                         case "NMTOKENS":\r
80                                 return datatypeNMTokens;\r
81                         case "Name":\r
82                                 return datatypeName;\r
83                         case "NCname":\r
84                                 return datatypeNCName;\r
85                         case "ID":\r
86                                 return datatypeID;\r
87                         case "IDREF":\r
88                                 return datatypeIDRef;\r
89                         case "IDREFS":\r
90                                 return datatypeIDRefs;\r
91                         case "ENTITY":\r
92                                 return datatypeEntity;\r
93                         case "ENTITIES":\r
94                                 return datatypeEntities;\r
95                         case "NOTATION":\r
96                                 return datatypeNotation;\r
97                         case "decimal":\r
98                                 return datatypeDecimal;\r
99                         case "integer":\r
100                                 return datatypeInteger;\r
101                         case "long":\r
102                                 return datatypeLong;\r
103                         case "int":\r
104                                 return datatypeInt;\r
105                         case "short":\r
106                                 return datatypeShort;\r
107                         case "byte":\r
108                                 return datatypeByte;\r
109                         case "nonPositiveInteger":\r
110                                 return datatypeNonPositiveInteger;\r
111                         case "negativeInteger":\r
112                                 return datatypeNegativeInteger;\r
113                         case "nonNegativeInteger":\r
114                                 return datatypeNonNegativeInteger;\r
115                         case "unsignedLong":\r
116                                 return datatypeUnsignedLong;\r
117                         case "unsignedInt":\r
118                                 return datatypeUnsignedInt;\r
119                         case "unsignedShort":\r
120                                 return datatypeUnsignedShort;\r
121                         case "unsignedByte":\r
122                                 return datatypeUnsignedByte;\r
123                         case "positiveInteger":\r
124                                 return datatypePositiveInteger;\r
125                         default:\r
126                                 throw new NotImplementedException ("Unknown type: " + localName);\r
127                         }\r
128                 }\r
129 \r
130                 private static XsdString datatypeString = new XsdString ();\r
131                 private static XsdNormalizedString datatypeNormalizedString = new XsdNormalizedString ();\r
132                 private static XsdToken datatypeToken = new XsdToken ();\r
133                 private static XsdLanguage datatypeLanguage = new XsdLanguage ();\r
134                 private static XsdNMToken datatypeNMToken = new XsdNMToken ();\r
135                 private static XsdNMTokens datatypeNMTokens = new XsdNMTokens ();\r
136                 private static XsdName datatypeName = new XsdName ();\r
137                 private static XsdNCName datatypeNCName = new XsdNCName ();\r
138                 private static XsdID datatypeID = new XsdID ();\r
139                 private static XsdIDRef datatypeIDRef = new XsdIDRef ();\r
140                 private static XsdIDRefs datatypeIDRefs = new XsdIDRefs ();\r
141                 private static XsdEntity datatypeEntity = new XsdEntity ();\r
142                 private static XsdEntities datatypeEntities = new XsdEntities ();\r
143                 private static XsdNotation datatypeNotation = new XsdNotation ();\r
144                 private static XsdDecimal datatypeDecimal = new XsdDecimal ();\r
145                 private static XsdInteger datatypeInteger = new XsdInteger ();\r
146                 private static XsdLong datatypeLong = new XsdLong ();\r
147                 private static XsdInt datatypeInt = new XsdInt ();\r
148                 private static XsdShort datatypeShort = new XsdShort ();\r
149                 private static XsdByte datatypeByte = new XsdByte ();\r
150                 private static XsdNonNegativeInteger datatypeNonNegativeInteger = new XsdNonNegativeInteger ();\r
151                 private static XsdPositiveInteger datatypePositiveInteger = new XsdPositiveInteger ();\r
152                 private static XsdUnsignedLong datatypeUnsignedLong = new XsdUnsignedLong ();\r
153                 private static XsdUnsignedInt datatypeUnsignedInt = new XsdUnsignedInt ();\r
154                 private static XsdUnsignedShort datatypeUnsignedShort = new XsdUnsignedShort ();\r
155                 private static XsdUnsignedByte datatypeUnsignedByte = new XsdUnsignedByte ();\r
156                 private static XsdNonPositiveInteger datatypeNonPositiveInteger = new XsdNonPositiveInteger ();\r
157                 private static XsdNegativeInteger datatypeNegativeInteger = new XsdNegativeInteger ();\r
158         }\r
159 }\r