+ if (reader == null)
+ throw new ArgumentException ();
+
+ if (reader.ReadState == ReadState.Initial) {
+ while (reader.Read ())
+ WriteNode (reader, defattr);
+ }
+ else {
+ switch (reader.NodeType) {
+ case XmlNodeType.Element:
+ WriteStartElement (reader.Prefix, reader.LocalName, reader.NamespaceURI);
+ WriteAttributes (reader, defattr);
+ if (reader.IsEmptyElement)
+ WriteEndElement ();
+ break;
+ case XmlNodeType.Attribute:
+ break;
+ case XmlNodeType.Text:
+ WriteString (reader.Value);
+ break;
+ case XmlNodeType.CDATA:
+ WriteCData (reader.Value);
+ break;
+ case XmlNodeType.EntityReference:
+ WriteEntityRef (reader.Name);
+ break;
+ case XmlNodeType.ProcessingInstruction:
+ WriteProcessingInstruction (reader.Name, reader.Value);
+ break;
+ case XmlNodeType.Comment:
+ WriteComment (reader.Value);
+ break;
+ case XmlNodeType.DocumentType:
+ WriteDocType (reader.Name,
+ reader ["PUBLIC"], reader ["SYSTEM"], reader.Value);
+ break;
+ case XmlNodeType.SignificantWhitespace:
+ goto case XmlNodeType.Whitespace;
+ case XmlNodeType.Whitespace:
+ WriteWhitespace (reader.Value);
+ break;
+ case XmlNodeType.EndElement:
+ break;
+ case XmlNodeType.EndEntity:
+ break;
+ case XmlNodeType.XmlDeclaration:
+ WriteStartDocument (reader.GetAttribute ("standalone").ToLower () == "yes");
+ break;
+ default:
+ throw new NotImplementedException ();
+ }
+ }