2002-11-24 Duncan Mak <duncan@ximian.com>
[mono.git] / mcs / class / System.XML / System.Xml / XmlSignificantWhitespace.cs
index 0b51e284c9b1b48643346816e72c4b92e4a57815..1df1a7f512ba18c87115db9ddf7c11e01fb9f5a8 100644 (file)
@@ -1,58 +1,72 @@
-//\r
-// System.Xml.XmlSignificantWhitespace.cs\r
-//\r
-// Author:\r
-//     Duncan Mak  (duncan@ximian.com)\r
-//\r
-// (C) Ximian, Inc. http://www.ximian.com\r
-//\r
-\r
-using System;\r
-\r
-namespace System.Xml\r
-{\r
-       public class XmlSignificantWhitespace : XmlCharacterData\r
-       {\r
-               // Constructor\r
-               protected internal XmlSignificantWhitespace (string strData, XmlDocument doc)\r
-                       : base (strData, doc)\r
-               {\r
-               }\r
-               \r
-               // Properties\r
-               public override string LocalName {\r
-                       get { return "#significant-whitespace"; }\r
-               }\r
-\r
-               public override string Name {\r
-                       get { return "#significant-whitespace"; }\r
-               }\r
-\r
-               public override XmlNodeType NodeType {\r
-                       get { return XmlNodeType.SignificantWhitespace; }\r
-               }\r
-\r
-               [MonoTODO]\r
-               public override string Value {\r
-                       get { return null; }\r
-                       set {}\r
-               }\r
-\r
-               // Methods\r
-               [MonoTODO]\r
-               public override XmlNode CloneNode (bool deep)\r
-               {\r
-                       return null;\r
-               }\r
-\r
-               [MonoTODO]\r
-               public override void WriteContentTo (XmlWriter w)\r
-               {                       \r
-               }\r
-\r
-               [MonoTODO]\r
-               public override void WriteTo (XmlWriter w)\r
-               {                       \r
-               }\r
-       }\r
-}\r
+//
+// System.Xml.XmlSignificantWhitespace.cs
+//
+// Author:
+//     Duncan Mak  (duncan@ximian.com)
+//
+// (C) Ximian, Inc. http://www.ximian.com
+//
+
+using System;
+using System.Xml.XPath;
+
+namespace System.Xml
+{
+       public class XmlSignificantWhitespace : XmlCharacterData
+       {
+               // Constructor
+               protected internal XmlSignificantWhitespace (string strData, XmlDocument doc)
+                       : base (strData, doc)
+               {
+               }
+               
+               // Properties
+               public override string LocalName {
+                       get { return "#significant-whitespace"; }
+               }
+
+               public override string Name {
+                       get { return "#significant-whitespace"; }
+               }
+
+               public override XmlNodeType NodeType {
+                       get { return XmlNodeType.SignificantWhitespace; }
+               }
+
+               internal override XPathNodeType XPathNodeType {
+                       get {
+                               return XPathNodeType.SignificantWhitespace;
+                       }
+               }
+               
+               public override string Value {
+                       get { return Data; }
+                       set {
+                               if (IsValidWhitespaceChar (value) == false)
+                                       throw new ArgumentException ("Invalid whitespace characters.");
+                               base.Data = value;
+                       }
+               }
+
+               // Methods
+               public override XmlNode CloneNode (bool deep)
+               {
+                       return new XmlSignificantWhitespace (Data, OwnerDocument);
+               }
+
+               public override void WriteContentTo (XmlWriter w) {}
+
+               public override void WriteTo (XmlWriter w)
+               {
+                       w.WriteWhitespace (Data);
+               }
+
+               private bool IsValidWhitespaceChar (string text)
+               {
+                       foreach (char c in text)
+                               if ((c != ' ') && (c != '\r') && (c != '\n') && (c != '\t'))
+                                       return false;
+                       return true;
+               }
+       }
+}