2004-05-06 Atsushi Enomoto <atsushi@ximian.com>
[mono.git] / mcs / class / System.XML / System.Xml.Schema / XmlSchemaReader.cs
1 using System;\r
2 using System.Xml;\r
3 \r
4 namespace System.Xml.Schema\r
5 {\r
6         /// <summary>\r
7         /// A wrapper around XmlReader\r
8         /// </summary>\r
9         internal class XmlSchemaReader : XmlReader, IXmlLineInfo\r
10         {\r
11                 XmlReader reader;\r
12                 ValidationEventHandler handler;\r
13                 bool hasLineInfo;\r
14                 public XmlSchemaReader(XmlReader reader,ValidationEventHandler handler)\r
15                 {\r
16                         this.reader = reader;\r
17                         this.handler = handler;\r
18                         if(reader is IXmlLineInfo)\r
19                         {\r
20                                 IXmlLineInfo info = (IXmlLineInfo)reader;\r
21                                 hasLineInfo = info.HasLineInfo();\r
22                         }\r
23                 }\r
24 \r
25                 /// <summary>\r
26                 /// Returns the Namespace:LocalName for the object\r
27                 /// </summary>\r
28                 public string FullName\r
29                 {\r
30                         get { return NamespaceURI + ":" + LocalName; }\r
31                 }\r
32 \r
33                 public XmlReader Reader\r
34                 {\r
35                         get { return this.reader; }\r
36                 }\r
37 \r
38                 public void RaiseInvalidElementError()\r
39                 {\r
40                         string errstr = "Element "+FullName + " is invalid in this context.\n";\r
41                         if(hasLineInfo)\r
42                                 errstr += "The error occured on ("+((IXmlLineInfo)reader).LineNumber\r
43                                         +","+((IXmlLineInfo)reader).LinePosition+")";\r
44                         XmlSchemaObject.error(handler, errstr, null);\r
45                         SkipToEnd();\r
46                 }\r
47                 /// <summary>\r
48                 /// Reads till the next Element or EndElement. Also checks that the Namespace of the element is\r
49                 /// Schema's Namespace.\r
50                 /// </summary>\r
51                 /// <returns></returns>\r
52                 public bool ReadNextElement()\r
53                 {\r
54                         MoveToElement();\r
55                         while(Read())\r
56                         {\r
57                                 if(NodeType == XmlNodeType.Element || NodeType == XmlNodeType.EndElement)\r
58                                 {\r
59                                         if(reader.NamespaceURI != XmlSchema.Namespace)\r
60                                         {\r
61                                                 RaiseInvalidElementError();\r
62                                         }\r
63                                         else\r
64                                         {\r
65                                                 return true;\r
66                                         }\r
67                                 }\r
68                         }\r
69                         return false;\r
70                 }\r
71 \r
72                 /// <summary>\r
73                 /// Skips to the end of the current element\r
74                 /// </summary>\r
75                 public void SkipToEnd()\r
76                 {\r
77                         MoveToElement();\r
78                         if(IsEmptyElement || NodeType != XmlNodeType.Element)\r
79                                 return;\r
80                         if(NodeType == XmlNodeType.Element)\r
81                         {\r
82                                 int depth = Depth;\r
83                                 while(Read())\r
84                                 {\r
85                                         if(Depth == depth)\r
86                                                 break;\r
87                                 }\r
88                         }\r
89                         return;\r
90                 }\r
91 \r
92                 #region LineInfo\r
93                 public bool HasLineInfo()\r
94                 {\r
95                         return hasLineInfo;\r
96                 }\r
97                 public int LineNumber\r
98                 {\r
99                         get { return hasLineInfo?((IXmlLineInfo)reader).LineNumber: 0; }\r
100                 }\r
101                 public int LinePosition\r
102                 {\r
103                         get { return hasLineInfo?((IXmlLineInfo)reader).LinePosition: 0; }\r
104                 }\r
105                 #endregion\r
106 \r
107                 #region Delegates\r
108                 public override int AttributeCount \r
109                 {\r
110                         get { return  reader.AttributeCount; }\r
111                 }\r
112                 public override string BaseURI \r
113                 {\r
114                         get { return  reader.BaseURI; }\r
115                 }\r
116                 public override bool CanResolveEntity \r
117                 {\r
118                         get { return  reader.CanResolveEntity; }\r
119                 }\r
120                 public override int Depth \r
121                 {\r
122                         get { return  reader.Depth; }\r
123                 }\r
124                 public override bool EOF \r
125                 {\r
126                         get { return  reader.EOF; }\r
127                 }\r
128                 public override bool HasAttributes \r
129                 {\r
130                         get { return  reader.HasAttributes; }\r
131                 }\r
132                 public override bool HasValue \r
133                 {\r
134                         get { return  reader.HasValue; }\r
135                 }\r
136                 public override bool IsDefault \r
137                 {\r
138                         get { return  reader.IsDefault; }\r
139                 }\r
140                 public override bool IsEmptyElement \r
141                 {\r
142                         get { return  reader.IsEmptyElement; }\r
143                 }\r
144                 public override string this[ int i ] \r
145                 {\r
146                         get { return  reader[i]; }\r
147                 }\r
148                 public override string this[ string name ] \r
149                 {\r
150                         get { return  reader[name]; }\r
151                 }\r
152                 public override string this[ string name, string namespaceURI ] \r
153                 {\r
154                         get { return  reader[name,namespaceURI]; }\r
155                 }\r
156                 public override string LocalName \r
157                 {\r
158                         get { return  reader.LocalName; }\r
159                 }\r
160                 public override string Name \r
161                 {\r
162                         get { return  reader.Name; }\r
163                 }\r
164                 public override string NamespaceURI \r
165                 {\r
166                         get { return  reader.NamespaceURI; }\r
167                 }\r
168                 public override XmlNameTable NameTable \r
169                 {\r
170                         get { return  reader.NameTable; }\r
171                 }\r
172                 public override XmlNodeType NodeType \r
173                 {\r
174                         get { return  reader.NodeType; }\r
175                 }\r
176                 public override string Prefix \r
177                 {\r
178                         get { return  reader.Prefix; }\r
179                 }\r
180                 public override char QuoteChar \r
181                 {\r
182                         get { return  reader.QuoteChar; }\r
183                 }\r
184                 public override ReadState ReadState \r
185                 {\r
186                         get { return  reader.ReadState; }\r
187                 }\r
188                 public override string Value \r
189                 {\r
190                         get { return  reader.Value; }\r
191                 }\r
192                 public override string XmlLang \r
193                 {\r
194                         get { return  reader.XmlLang; }\r
195                 }\r
196                 public override XmlSpace XmlSpace \r
197                 {\r
198                         get { return  reader.XmlSpace; }\r
199                 }\r
200 \r
201                 public override void Close()\r
202                 {\r
203                         reader.Close(); \r
204                 }\r
205 \r
206                 public override bool Equals(object obj)\r
207                 {\r
208                         return reader.Equals(obj); \r
209                 }\r
210 \r
211                 public override string GetAttribute(int i)\r
212                 {\r
213                         return reader.GetAttribute(i); \r
214                 }\r
215 \r
216                 public override string GetAttribute(string name)\r
217                 {\r
218                         return reader.GetAttribute(name); \r
219                 }\r
220 \r
221                 public override string GetAttribute(string name, string namespaceURI)\r
222                 {\r
223                         return reader.GetAttribute(name, namespaceURI); \r
224                 }\r
225 \r
226                 public override int GetHashCode()\r
227                 {\r
228                         return reader.GetHashCode(); \r
229                 }\r
230 \r
231                 public override bool IsStartElement()\r
232                 {\r
233                         return reader.IsStartElement(); \r
234                 }\r
235 \r
236                 public override bool IsStartElement(string localname, string ns)\r
237                 {\r
238                         return reader.IsStartElement(localname, ns); \r
239                 }\r
240 \r
241                 public override bool IsStartElement(string name)\r
242                 {\r
243                         return reader.IsStartElement(name); \r
244                 }\r
245 \r
246                 public override string LookupNamespace(string prefix)\r
247                 {\r
248                         return reader.LookupNamespace(prefix); \r
249                 }\r
250 \r
251                 public override void MoveToAttribute(int i)\r
252                 {\r
253                         reader.MoveToAttribute(i); \r
254                 }\r
255 \r
256                 public override bool MoveToAttribute(string name)\r
257                 {\r
258                         return reader.MoveToAttribute(name); \r
259                 }\r
260 \r
261                 public override bool MoveToAttribute(string name, string ns)\r
262                 {\r
263                         return reader.MoveToAttribute(name,ns); \r
264                 }\r
265 \r
266                 public override System.Xml.XmlNodeType MoveToContent()\r
267                 {\r
268                         return reader.MoveToContent(); \r
269                 }\r
270 \r
271                 public override bool MoveToElement()\r
272                 {\r
273                         return reader.MoveToElement(); \r
274                 }\r
275 \r
276                 public override bool MoveToFirstAttribute()\r
277                 {\r
278                         return reader.MoveToFirstAttribute(); \r
279                 }\r
280 \r
281                 public override bool MoveToNextAttribute()\r
282                 {\r
283                         return reader.MoveToNextAttribute(); \r
284                 }\r
285 \r
286                 public override bool Read()\r
287                 {\r
288                         return reader.Read(); \r
289                 }\r
290 \r
291                 public override bool ReadAttributeValue()\r
292                 {\r
293                         return reader.ReadAttributeValue(); \r
294                 }\r
295 \r
296                 public override string ReadElementString()\r
297                 {\r
298                         return reader.ReadElementString(); \r
299                 }\r
300 \r
301                 public override string ReadElementString(string localname, string ns)\r
302                 {\r
303                         return reader.ReadElementString(localname, ns); \r
304                 }\r
305 \r
306                 public override string ReadElementString(string name)\r
307                 {\r
308                         return reader.ReadElementString(name); \r
309                 }\r
310 \r
311                 public override void ReadEndElement()\r
312                 {\r
313                         reader.ReadEndElement(); \r
314                 }\r
315 \r
316                 public override string ReadInnerXml()\r
317                 {\r
318                         return reader.ReadInnerXml(); \r
319                 }\r
320 \r
321                 public override string ReadOuterXml()\r
322                 {\r
323                         return reader.ReadOuterXml(); \r
324                 }\r
325 \r
326                 public override void ReadStartElement()\r
327                 {\r
328                         reader.ReadStartElement(); \r
329                 }\r
330 \r
331                 public override void ReadStartElement(string localname, string ns)\r
332                 {\r
333                         reader.ReadStartElement(localname, ns); \r
334                 }\r
335 \r
336                 public override void ReadStartElement(string name)\r
337                 {\r
338                         reader.ReadStartElement(name); \r
339                 }\r
340 \r
341                 public override string ReadString()\r
342                 {\r
343                         return reader.ReadString(); \r
344                 }\r
345 \r
346                 public override void ResolveEntity()\r
347                 {\r
348                         reader.ResolveEntity(); \r
349                 }\r
350 \r
351                 public override void Skip()\r
352                 {\r
353                         reader.Skip(); \r
354                 }\r
355 \r
356                 public override string ToString()\r
357                 {\r
358                         return reader.ToString(); \r
359                 }\r
360 \r
361                 #endregion\r
362         }\r
363 }\r