2002-07-26 Tim Coleman <tim@timcoleman.com>
[mono.git] / mcs / class / System.XML / System.Xml / XmlCharacterData.cs
index 41ba1de77c786ec0e23c76ee17fb38505632a985..bdd3612bb6cd33629dcb4900cc3ffc8734646436 100644 (file)
-// System.Xml.XmlCharacterData.cs\r
-//\r
-// Author: Daniel Weber (daniel-weber@austin.rr.com)\r
-//\r
-// Implementation of abstract Xml.XmlCharacterData class\r
-//\r
-// Provides text manipulation methods used by derived classes\r
-//     abstract class\r
-\r
-using System;\r
-\r
-namespace System.Xml\r
-{\r
-       /// <summary>\r
-       /// Abstratc class to provide text manipulation methods for derived classes\r
-       /// </summary>\r
-       public abstract class XmlCharacterData : XmlLinkedNode\r
-       {\r
-               // ============ Public Properties =====================================\r
-               //=====================================================================\r
-               /// <summary>\r
-               /// Contains the nodes data\r
-               /// </summary>\r
-               public virtual string Data \r
-               {\r
-                       get\r
-                       {\r
-                               // TODO - implement Data {get;}\r
-                               throw new NotImplementedException();\r
-                       }\r
-                       \r
-                       set\r
-                       {\r
-                               // TODO - implement Data {set;}\r
-                               throw new NotImplementedException();\r
-                       }\r
-               }\r
-\r
-               /// <summary>\r
-               /// Get/Set the nodes value\r
-               /// </summary>\r
-               public override string Value \r
-               {\r
-                       get\r
-                       {\r
-                               // TODO - implement Value {get;}\r
-                               throw new NotImplementedException();\r
-                       }\r
-\r
-                       set\r
-                       {\r
-                               // TODO - implement Value {set;}\r
-                               throw new NotImplementedException();\r
-                       }\r
-               }\r
-\r
-               public override string InnerText \r
-               {\r
-                       get\r
-                       {\r
-                               // TODO - implement InnerText {get;}\r
-                               throw new NotImplementedException();\r
-                       }\r
-\r
-                       set\r
-                       {\r
-                               // TODO - implement InnerText {set;}\r
-                               throw new NotImplementedException();\r
-                       }\r
-               }\r
-\r
-               /// <summary>\r
-               /// Returns the length of data, in characters\r
-               /// </summary>\r
-               public virtual int Length \r
-               {\r
-                       get\r
-                       {\r
-                               // TODO - implement Length {get;}\r
-                               throw new NotImplementedException();\r
-                       }\r
-               }\r
-\r
-               // ============ Public Methods  =======================================\r
-               //=====================================================================\r
-               /// <summary>\r
-               /// Appends string strData to the end of data\r
-               /// </summary>\r
-               /// <param name="strData"></param>\r
-               public virtual void AppendData(string strData)\r
-               {\r
-                       // TODO - implement AppendData(strData)\r
-                       throw new NotImplementedException();\r
-               }\r
-\r
-               /// <summary>\r
-               /// Remove a range of characters from the node\r
-               /// </summary>\r
-               /// <param name="offset">offset, in characters, to start delete</param>\r
-               /// <param name="count">Number of characters to delete</param>\r
-               public virtual void DeleteData(int offset, int count)\r
-               {\r
-                       // TODO - implement DeleteData(offset, count)\r
-                       throw new NotImplementedException();\r
-               }\r
-\r
-               /// <summary>\r
-               /// Replaces the number of characters, starting at offset, with the passed string\r
-               /// </summary>\r
-               /// <param name="offset">Offset (in characters) to start replacement</param>\r
-               /// <param name="count">Number of characters to replace</param>\r
-               /// <param name="strData">Replacement string</param>\r
-               public virtual void ReplaceData(int offset, int count, string strData)\r
-               {\r
-                       // TODO - implement ReplaceData(offset, count, strData)\r
-                       throw new NotImplementedException();\r
-               }\r
-\r
-               /// <summary>\r
-               /// Retrieves a substring of the specified range\r
-               /// </summary>\r
-               /// <param name="offset">Character offset to begin string</param>\r
-               /// <param name="count">Number of characters to return</param>\r
-               /// <returns></returns>\r
-               public virtual string Substring(int offset, int count)\r
-               {\r
-                       // TODO - implement Substring(offset, count)\r
-                       throw new NotImplementedException();\r
-               }\r
-\r
-               // ============ Protected Methods  ====================================\r
-               //=====================================================================\r
-               /// <summary>\r
-               /// Listed in beta 2, but no description\r
-               /// [to be supplied]\r
-               /// </summary>\r
-               /// <param name="node"></param>\r
-               /// <param name="xnt"></param>\r
-               /// <returns></returns>\r
-               protected internal bool DecideXPNodeTypeForWhitespace(\r
-                       XmlNode node,\r
-                       ref XPathNodeType xnt\r
-                       )\r
-               {\r
-                       // TODO\r
-                       throw new NotImplementedException();\r
-               }\r
-\r
-               // Constructors\r
-               internal XmlCharacterData ( XmlDocument aOwnerDoc) : base(aOwnerDoc)\r
-               {\r
-               }\r
-       }\r
-}
\ No newline at end of file
+//
+// System.Xml.XmlCharacterData.cs
+//
+// Author:
+//   Jason Diamond <jason@injektilo.org>
+//
+// (C) 2002 Jason Diamond  http://injektilo.org/
+//
+
+using System;
+
+namespace System.Xml
+{
+       public abstract class XmlCharacterData : XmlLinkedNode
+       {
+               private string data;
+
+               #region Constructor
+
+               protected internal XmlCharacterData (string data, XmlDocument doc)
+                       : base (doc)
+               {
+                       if (data == null)
+                               data = String.Empty;
+
+                       this.data = data;
+               }
+
+               #endregion
+               
+               #region Properties
+
+               public virtual string Data {
+                       get { return data; }
+                       
+                       set { data = value; }
+               }
+
+               public override string InnerText {
+                       get { return data; }
+
+                       set { data = value; }
+               }
+
+               public virtual int Length {
+                       get { return data != null ? data.Length : 0; }
+               }
+
+               public override string Value {
+                       get { return data; }
+
+                       set {
+                               if (IsReadOnly)
+                                       throw new ArgumentException ("Node is read-only.");
+
+                               data = value;
+                       }
+               }
+
+               #endregion
+
+               #region Methods
+
+               [MonoTODO]
+               public virtual void AppendData (string strData)
+               {
+                       throw new NotImplementedException ();
+               }
+
+               [MonoTODO]
+               public virtual void DeleteData (int offset, int count)
+               {
+                       throw new NotImplementedException ();
+               }
+
+               [MonoTODO]
+               public virtual void InsertData (int offset, string strData)
+               {
+                       throw new NotImplementedException ();
+               }
+
+               [MonoTODO]
+               public virtual void ReplaceData (int offset, int count, string strData)
+               {
+                       throw new NotImplementedException();
+               }
+
+               public virtual string Substring (int offset, int count)
+               {
+                       return data.Substring (offset, count);
+               }
+
+               #endregion
+       }
+}