AngleSharp by AngleSharp

<PackageReference Include="AngleSharp" Version="0.9.8" />

.NET API 1,214,976 bytes

 CharacterData

The base class for all characterdata implementations.
using AngleSharp.Dom.Collections; using AngleSharp.Extensions; using AngleSharp.Html; using System.IO; namespace AngleSharp.Dom { internal abstract class CharacterData : Node, ICharacterData, INode, IEventTarget, IMarkupFormattable, IChildNode, INonDocumentTypeChildNode { private string _content; public IElement PreviousElementSibling { get { Node parent = base.Parent; if (parent != null) { bool flag = false; for (int num = parent.ChildNodes.Length - 1; num >= 0; num--) { if (parent.ChildNodes[num] == this) flag = true; else if (flag && parent.ChildNodes[num] is IElement) { return (IElement)parent.ChildNodes[num]; } } } return null; } } public IElement NextElementSibling { get { Node parent = base.Parent; if (parent != null) { int length = parent.ChildNodes.Length; bool flag = false; for (int i = 0; i < length; i++) { if (parent.ChildNodes[i] == this) flag = true; else if (flag && parent.ChildNodes[i] is IElement) { return (IElement)parent.ChildNodes[i]; } } } return null; } } internal char this[int index] { get { return _content[index]; } set { if (index >= 0) { if (index >= Length) _content = _content.PadRight(index) + value.ToString(); else { char[] array = _content.ToCharArray(); array[index] = value; _content = new string(array); } } } } public int Length => _content.Length; public sealed override string NodeValue { get { return Data; } set { Data = value; } } public sealed override string TextContent { get { return Data; } set { Data = value; } } public string Data { get { return _content; } set { Replace(0, Length, value); } } internal CharacterData(Document owner, string name, NodeType type) : this(owner, name, type, string.Empty) { } internal CharacterData(Document owner, string name, NodeType type, string content) : base(owner, name, type, NodeFlags.None) { _content = content; } public string Substring(int offset, int count) { int length = _content.Length; if (offset > length) throw new DomException(DomError.IndexSizeError); if (offset + count > length) return _content.Substring(offset); return _content.Substring(offset, count); } public void Append(string value) { Replace(_content.Length, 0, value); } public void Insert(int offset, string data) { Replace(offset, 0, data); } public void Delete(int offset, int count) { Replace(offset, count, string.Empty); } public void Replace(int offset, int count, string data) { Document owner = base.Owner; int length = _content.Length; if (offset > length) throw new DomException(DomError.IndexSizeError); if (offset + count > length) count = length - offset; owner.QueueMutation(MutationRecord.CharacterData(this, _content)); int startIndex = offset + data.Length; _content = _content.Insert(offset, data).Remove(startIndex, count); owner.ForEachRange(delegate(Range m) { if (m.Head == this && m.Start > offset) return m.Start <= offset + count; return false; }, delegate(Range m) { m.StartWith(this, offset); }); owner.ForEachRange(delegate(Range m) { if (m.Tail == this && m.End > offset) return m.End <= offset + count; return false; }, delegate(Range m) { m.EndWith(this, offset); }); owner.ForEachRange(delegate(Range m) { if (m.Head == this) return m.Start > offset + count; return false; }, delegate(Range m) { m.StartWith(this, m.Start + data.Length - count); }); owner.ForEachRange(delegate(Range m) { if (m.Tail == this) return m.End > offset + count; return false; }, delegate(Range m) { m.EndWith(this, m.End + data.Length - count); }); } public override void ToHtml(TextWriter writer, IMarkupFormatter formatter) { writer.Write(formatter.Text(_content)); } public void Before(params INode[] nodes) { this.InsertBefore(nodes); } public void After(params INode[] nodes) { this.InsertAfter(nodes); } public void Replace(params INode[] nodes) { this.ReplaceWith(nodes); } public void Remove() { this.RemoveFromParent(); } } }