2010-05-27 Jb Evain <jbevain@novell.com>
[mcs.git] / class / System.Runtime.Serialization / System.Xml / XmlSimpleDictionaryReader.cs
blob77682e4d1994f836be7ba56d593a70f71712f230
1 using System;
2 using System.Collections;
3 using System.Collections.Generic;
5 namespace System.Xml
7 internal class XmlSimpleDictionaryReader :
8 XmlDictionaryReader, IXmlLineInfo, IXmlNamespaceResolver
10 XmlDictionary dict;
11 XmlReader reader;
12 XmlDictionaryReader as_dict_reader;
13 IXmlLineInfo as_line_info;
14 OnXmlDictionaryReaderClose onClose;
16 public XmlSimpleDictionaryReader (XmlReader reader)
17 : this (reader, null)
21 public XmlSimpleDictionaryReader (XmlReader reader,
22 XmlDictionary dictionary)
23 : this (reader, dictionary, null)
27 public XmlSimpleDictionaryReader (XmlReader reader,
28 XmlDictionary dictionary, OnXmlDictionaryReaderClose onClose)
30 this.reader = reader;
31 this.onClose = onClose;
32 as_line_info = reader as IXmlLineInfo;
33 as_dict_reader = reader as XmlDictionaryReader;
35 if (dictionary == null)
36 dictionary = new XmlDictionary ();
37 dict = dictionary;
40 #region IXmlLineInfo
41 public int LineNumber {
42 get { return as_line_info != null ? as_line_info.LineNumber : 0; }
45 public int LinePosition {
46 get { return as_line_info != null ? as_line_info.LinePosition : 0; }
49 public bool HasLineInfo ()
51 return as_line_info != null ? as_line_info.HasLineInfo () : false;
53 #endregion
55 #region XmlDictionaryReader
57 public override bool CanCanonicalize {
58 get { return as_dict_reader != null ? as_dict_reader.CanCanonicalize : false; }
61 public override void EndCanonicalization ()
63 if (as_dict_reader != null)
64 as_dict_reader.EndCanonicalization ();
65 else
66 throw new NotSupportedException ();
69 // no need to override for GetAttribute(), IndexOfLocalName(),
70 // IsLocalName(), IsNamespaceUri(), IsStartElement()
72 public override bool TryGetLocalNameAsDictionaryString (
73 out XmlDictionaryString localName)
75 // FIXME: find out when it returns true.
76 localName = null;
77 return false;
78 // if (!dict.TryLookup (LocalName, out localName))
79 // return false;
80 // return true;
83 public override bool TryGetNamespaceUriAsDictionaryString (
84 out XmlDictionaryString namespaceUri)
86 // FIXME: find out when it returns true.
87 namespaceUri = null;
88 return false;
89 // if (!dict.TryLookup (NamespaceURI, out namespaceUri))
90 // return false;
91 // return true;
93 #endregion
95 #region IXmlNamespaceResolver
97 public IDictionary<string,string> GetNamespacesInScope (
98 XmlNamespaceScope scope)
100 IXmlNamespaceResolver nsr = reader as IXmlNamespaceResolver;
101 return nsr.GetNamespacesInScope (scope);
104 public string LookupPrefix (string ns)
106 IXmlNamespaceResolver nsr = reader as IXmlNamespaceResolver;
107 return nsr.LookupPrefix (NameTable.Get (ns));
110 #endregion
112 #region XmlReader
114 public override int AttributeCount {
115 get { return reader.AttributeCount; }
118 public override string BaseURI {
119 get { return reader.BaseURI; }
122 public override int Depth {
123 get { return reader.Depth; }
126 public override XmlNodeType NodeType
128 get { return reader.NodeType; }
131 public override string Name {
132 get { return reader.Name; }
135 public override string LocalName {
136 get { return reader.LocalName; }
139 public override string NamespaceURI {
140 get { return reader.NamespaceURI; }
143 public override string Prefix {
144 get { return reader.Prefix; }
147 public override bool HasValue {
148 get { return reader.HasValue; }
151 public override string Value {
152 get { return reader.Value; }
155 public override bool IsEmptyElement {
156 get { return reader.IsEmptyElement; }
159 public override bool IsDefault {
160 get { return reader.IsDefault; }
163 public override char QuoteChar {
164 get { return reader.QuoteChar; }
167 public override string XmlLang {
168 get { return reader.XmlLang; }
171 public override XmlSpace XmlSpace {
172 get { return reader.XmlSpace; }
175 public override string this [int i] {
176 get { return reader [i]; }
179 public override string this [string name] {
180 get { return reader [name]; }
183 public override string this [string localName, string namespaceURI] {
184 get { return reader [localName, namespaceURI]; }
187 public override bool EOF {
188 get { return reader.EOF; }
191 public override ReadState ReadState {
192 get { return reader.ReadState; }
195 public override XmlNameTable NameTable {
196 get { return reader.NameTable; }
199 public override string GetAttribute (string name)
201 return reader.GetAttribute (name);
204 public override string GetAttribute (string localName, string namespaceURI)
206 return reader.GetAttribute (localName, namespaceURI);
209 public override string GetAttribute (int i)
211 return reader.GetAttribute (i);
214 public override bool MoveToAttribute (string name)
216 return reader.MoveToAttribute (name);
219 public override bool MoveToAttribute (string localName, string namespaceURI)
221 return reader.MoveToAttribute (localName, namespaceURI);
224 public override void MoveToAttribute (int i)
226 reader.MoveToAttribute (i);
229 public override bool MoveToFirstAttribute ()
231 return reader.MoveToFirstAttribute ();
234 public override bool MoveToNextAttribute ()
236 return reader.MoveToNextAttribute ();
239 public override bool MoveToElement ()
241 return reader.MoveToElement ();
244 public override void Close ()
246 reader.Close ();
247 if (onClose != null)
248 onClose (this);
251 public override bool Read ()
253 if (!reader.Read ())
254 return false;
255 dict.Add (reader.Prefix);
256 dict.Add (reader.LocalName);
257 dict.Add (reader.NamespaceURI);
258 if (reader.MoveToFirstAttribute ()) {
259 do {
260 dict.Add (reader.Prefix);
261 dict.Add (reader.LocalName);
262 dict.Add (reader.NamespaceURI);
263 dict.Add (reader.Value);
264 } while (reader.MoveToNextAttribute ());
265 reader.MoveToElement ();
267 return true;
270 public override string ReadString ()
272 return reader.ReadString ();
275 public override string ReadInnerXml ()
277 return reader.ReadInnerXml ();
280 public override string ReadOuterXml ()
282 return reader.ReadOuterXml ();
285 public override string LookupNamespace (string prefix)
287 return reader.LookupNamespace (prefix);
290 public override void ResolveEntity ()
292 reader.ResolveEntity ();
294 public override bool ReadAttributeValue ()
296 return reader.ReadAttributeValue ();
298 #endregion