X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fclass%2FSystem.XML%2FSystem.Xml%2FXmlTextWriter.cs;h=dba8ed19f329fe4b6284c58b07050214f9e19a6f;hb=2d7a230c66956b5c1d582513201054c1f4659650;hp=0ffad5646d2332eacc9f48c5a01940cbd9271147;hpb=8ba95aa556d0fbf3624fba4a16ec809fbe7a7b04;p=mono.git diff --git a/mcs/class/System.XML/System.Xml/XmlTextWriter.cs b/mcs/class/System.XML/System.Xml/XmlTextWriter.cs index 0ffad5646d2..dba8ed19f32 100644 --- a/mcs/class/System.XML/System.Xml/XmlTextWriter.cs +++ b/mcs/class/System.XML/System.Xml/XmlTextWriter.cs @@ -297,10 +297,23 @@ namespace System.Xml w.Write ("", text); } - [MonoTODO] public override void WriteDocType (string name, string pubid, string sysid, string subset) { - throw new NotImplementedException (); + if (name == null || name.Trim ().Length == 0) + throw new ArgumentException ("Invalid DOCTYPE name", "name"); + + w.Write ("'); } public override void WriteEndAttribute () @@ -330,11 +343,11 @@ namespace System.Xml public override void WriteEndDocument () { + CloseOpenAttributeAndElements (); + if ((ws == WriteState.Start) || (ws == WriteState.Prolog)) throw new ArgumentException ("This document does not have a root element."); - CloseOpenAttributeAndElements (); - ws = WriteState.Start; } @@ -379,16 +392,25 @@ namespace System.Xml WriteEndElementInternal (true); } - [MonoTODO] + private void CheckValidChars (string name, bool firstOnlyLetter) + { + foreach (char c in name) { + if (XmlConvert.IsInvalid (c, firstOnlyLetter)) + throw new ArgumentException ("There is an invalid character: '" + c + + "'", "name"); + } + } + public override void WriteName (string name) { - throw new NotImplementedException (); + CheckValidChars (name, true); + w.Write (name); } - [MonoTODO] public override void WriteNmToken (string name) { - throw new NotImplementedException (); + CheckValidChars (name, false); + w.Write (name); } public override void WriteProcessingInstruction (string name, string text) @@ -533,13 +555,19 @@ namespace System.Xml if (ns != String.Empty) { string existingPrefix = namespaceManager.LookupPrefix (ns); + bool addDefaultNamespace = false; + + if (existingPrefix == String.Empty && !namespaceManager.HasNamespace (prefix)) { + namespaceManager.AddNamespace (prefix, ns); + addDefaultNamespace = true; + } if (prefix == String.Empty) prefix = existingPrefix; if (prefix != existingPrefix) formatXmlns = String.Format (" xmlns:{0}={1}{2}{1}", prefix, quoteChar, ns); - else if (existingPrefix == String.Empty) + else if (addDefaultNamespace) formatXmlns = String.Format (" xmlns={0}{1}{0}", quoteChar, ns); } else if ((prefix == String.Empty) && (namespaceManager.LookupNamespace(prefix) != String.Empty)) {