*** empty log message ***
[mono.git] / mcs / class / System.XML / System.Xml / XmlNodeReader.cs
index 08b2e356c77e25ca652af713893983910bebc459..f77a2875e10388020c5e6398e194fb7aa2464d31 100755 (executable)
@@ -81,7 +81,6 @@ namespace System.Xml
                        }
                }
 
-               [MonoTODO]      // Is it really true always?
                public override bool CanResolveEntity {
                        get {
                                return true;
@@ -91,7 +90,7 @@ namespace System.Xml
                public override int Depth {
                        get {
                                if (entityReader != null && entityReader.ReadState == ReadState.Interactive)
-                                       return entityReader.Depth + depth + 1;
+                                       return entityReader.Depth + depth + entityReaderStack.Count + 1;
 
                                return depth;
                        }
@@ -144,7 +143,6 @@ namespace System.Xml
                              
                }
 
-               [MonoTODO("waiting for DTD implementation")]
                public override bool IsDefault {
                        get {
                                if (entityReader != null)
@@ -278,7 +276,10 @@ namespace System.Xml
                                if (current == null)
                                        return String.Empty;
 
-                               return current.Prefix;
+                               if (current.NodeType == XmlNodeType.Attribute)
+                                       return current.Prefix != String.Empty ? current.Prefix : null;
+                               else
+                                       return current.Prefix;
                        }
                }
 
@@ -478,6 +479,17 @@ namespace System.Xml
                        return null;
                }
 
+               internal XmlParserContext GetInternalParserContext ()
+               {
+                       if (entityReader != null)
+                               return entityReader.GetInternalParserContext ();
+                       else
+                               return new XmlParserContext (document.NameTable,
+                                       current.ConstructNamespaceManager (),
+                                       document.DocumentType != null ? document.DocumentType.DTD : null,
+                                       current.BaseURI, XmlLang, XmlSpace, Encoding.Unicode);
+               }
+
                public override string LookupNamespace (string prefix)
                {
                        if (entityReader != null && entityReader.ReadState != ReadState.Initial)
@@ -671,7 +683,6 @@ namespace System.Xml
                                return true;
                }
 
-               [MonoTODO("Entity handling is not supported.")]
                public override bool Read ()
                {
                        if (EOF)
@@ -773,8 +784,10 @@ namespace System.Xml
                        }
 
                        if (current.NodeType == XmlNodeType.Attribute) {
+                               if (current.FirstChild == null)
+                                       return false;
                                current = current.FirstChild;
-                               return current != null;
+                               return true;
                        } else if (current.ParentNode.NodeType == XmlNodeType.Attribute) {
                                if (current.NextSibling == null)
                                        return false;
@@ -784,6 +797,7 @@ namespace System.Xml
                                return false;
                }
 
+#if NET_1_0
                // Its traversal behavior is almost same as Read().
                public override string ReadInnerXml ()
                {
@@ -829,7 +843,6 @@ namespace System.Xml
                        }
                }
 
-               [MonoTODO("Need to move to next content.")]
                // Its traversal behavior is almost same as Read().
                public override string ReadOuterXml ()
                {
@@ -862,6 +875,7 @@ namespace System.Xml
                                return String.Empty;
                        }
                }
+#endif
 
                public override string ReadString ()
                {
@@ -891,10 +905,12 @@ namespace System.Xml
                        if (ctx == null) {
                                ctx = new XmlParserContext (document.NameTable,
                                        current.ConstructNamespaceManager (),
-                                       document.DocumentType.DTD,
+                                       document.DocumentType != null ? document.DocumentType.DTD : null,
                                        BaseURI, XmlLang, XmlSpace, Encoding.Unicode);
                        }
                        entityReader = new XmlTextReader (replacementText, xmlReaderNodeType, ctx);
+                       entityReader.XmlResolver = document.Resolver;
+                       entityReader.MaybeTextDecl = true;
                }
 
                public override void Skip ()