Welcome to mirror list, hosted at ThFree Co, Russian Federation.

XmlCharacterData.cs « System.Xml « System.XML « class « mcs - github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: a9fc7d267a6c9617a444f665d177d0eff8aa77d5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
//
// System.Xml.XmlCharacterData.cs
//
// Authors:
//   Jason Diamond <jason@injektilo.org>
//   Kral Ferch <kral_ferch@hotmail.com>
//
// (C) 2002 Jason Diamond, Kral Ferch
//

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 {
				OwnerDocument.onNodeChanging (this, this.ParentNode);

				if (IsReadOnly)
					throw new ArgumentException ("Node is read-only.");

				data = value;

				OwnerDocument.onNodeChanged (this, this.ParentNode);
			}
		}

		public override string InnerText {
			get { return data; }

			set { Data = value; }	// invokes events
		}

		public virtual int Length {
			get { return data != null ? data.Length : 0; }
		}

		public override string Value {
			get { return data; }

			set {
				Data = value;
			}
		}

		#endregion

		#region Methods

		public virtual void AppendData (string strData)
		{
			OwnerDocument.onNodeChanging (this, this.ParentNode);
			data += strData;
			OwnerDocument.onNodeChanged (this, this.ParentNode);
		}

		public virtual void DeleteData (int offset, int count)
		{
			OwnerDocument.onNodeChanging (this, this.ParentNode);

			if (offset < 0)
				throw new ArgumentOutOfRangeException ("offset", "Must be non-negative and must not be greater than the length of this instance.");

			int newCount = data.Length - offset;

			if ((offset + count) < data.Length)
				newCount = count;

			data = data.Remove (offset, newCount);
			
			OwnerDocument.onNodeChanged (this, this.ParentNode);
		}

		public virtual void InsertData (int offset, string strData)
		{
			OwnerDocument.onNodeChanging (this, this.ParentNode);

			if ((offset < 0) || (offset > data.Length))
				throw new ArgumentOutOfRangeException ("offset", "Must be non-negative and must not be greater than the length of this instance.");

			data = data.Insert(offset, strData);
			
			OwnerDocument.onNodeChanged (this, this.ParentNode);
		}

		public virtual void ReplaceData (int offset, int count, string strData)
		{
			OwnerDocument.onNodeChanging (this, this.ParentNode);

			if ((offset < 0) || (offset > data.Length))
				throw new ArgumentOutOfRangeException ("offset", "Must be non-negative and must not be greater than the length of this instance.");

			if (strData == null)
				throw new ArgumentNullException ("strData", "Must be non-null.");

			string newData = data.Substring (0, offset) + strData;
			
			if ((offset + count) < data.Length)
				newData += data.Substring (offset + count);

			data = newData;

			OwnerDocument.onNodeChanged (this, this.ParentNode);
		}

		public virtual string Substring (int offset, int count)
		{
			return data.Substring (offset, count);
		}

		#endregion
	}
}