CharacterData
The base class for all characterdata implementations.
using System.Text;
namespace AngleSharp.DOM
{
[DOM("CharacterData")]
public abstract class CharacterData : Node
{
private StringBuilder sb;
internal char this[int index] {
get {
return sb[index];
}
set {
sb[index] = value;
}
}
[DOM("length")]
public int Length {
get {
return sb.Length;
}
}
[DOM("nodeValue")]
public override string NodeValue {
get {
return sb.ToString();
}
set {
sb.Remove(0, sb.Length).Append(value);
}
}
[DOM("textContent")]
public override string TextContent {
get {
return sb.ToString();
}
set {
sb.Remove(0, sb.Length).Append(value);
}
}
[DOM("data")]
public string Data {
get {
return sb.ToString();
}
set {
sb.Remove(0, sb.Length).Append(value);
}
}
internal CharacterData()
{
sb = new StringBuilder();
}
[DOM("appendChild")]
public override Node AppendChild(Node child)
{
throw new DOMException(ErrorCode.NotSupported);
}
[DOM("insertBefore")]
public override Node InsertBefore(Node newElement, Node referenceElement)
{
throw new DOMException(ErrorCode.NotSupported);
}
[DOM("insertChild")]
public override Node InsertChild(int index, Node child)
{
throw new DOMException(ErrorCode.NotSupported);
}
[DOM("removeChild")]
public override Node RemoveChild(Node child)
{
throw new DOMException(ErrorCode.NotSupported);
}
[DOM("replaceChild")]
public override Node ReplaceChild(Node newChild, Node oldChild)
{
throw new DOMException(ErrorCode.NotSupported);
}
[DOM("substringData")]
public string SubstringData(int offset, int count)
{
return sb.ToString(offset, count);
}
[DOM("appendData")]
public CharacterData AppendData(string data)
{
sb.Append(data);
return this;
}
public CharacterData AppendData(char data)
{
sb.Append(data);
return this;
}
[DOM("insertData")]
public CharacterData InsertData(int offset, string data)
{
sb.Insert(offset, data);
return this;
}
public CharacterData InsertData(int offset, char data)
{
sb.Insert(offset, data);
return this;
}
[DOM("deleteData")]
public CharacterData DeleteData(int offset, int count)
{
sb.Remove(offset, count);
return this;
}
[DOM("replaceData")]
public CharacterData ReplaceData(int offset, int count, string data)
{
sb.Remove(offset, count).Insert(offset, data);
return this;
}
public override string ToHtml()
{
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < sb.Length; i++) {
switch (sb[i]) {
case '&':
stringBuilder.Append("&");
break;
case '<':
stringBuilder.Append("<");
break;
case '>':
stringBuilder.Append(">");
break;
default:
stringBuilder.Append(sb[i]);
break;
}
}
return stringBuilder.ToString();
}
}
}