AngleSharp by AngleSharp

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

.NET API 829,440 bytes

 TextNode

Represents a text node.
using AngleSharp.Text; using System.Text; namespace AngleSharp.Dom { internal sealed class TextNode : CharacterData, IText, ICharacterData, INode, IEventTarget, IMarkupFormattable, IChildNode, INonDocumentTypeChildNode { internal bool IsEmpty { get { for (int i = 0; i < base.Length; i++) { if (!base[i].IsSpaceCharacter()) return false; } return true; } } public string Text { get { Node previousSibling = base.PreviousSibling; TextNode textNode = this; StringBuilder stringBuilder = StringBuilderPool.Obtain(); while (previousSibling is TextNode) { textNode = (TextNode)previousSibling; previousSibling = textNode.PreviousSibling; } do { stringBuilder.Append(textNode.Data); textNode = (textNode.NextSibling as TextNode); } while (textNode != null); return stringBuilder.ToPool(); } } public IElement AssignedSlot { get { IElement parentElement = base.ParentElement; if (parentElement.IsShadow()) return parentElement.ShadowRoot.GetAssignedSlot(null); return null; } } internal TextNode(Document owner) : this(owner, string.Empty) { } internal TextNode(Document owner, string text) : base(owner, "#text", NodeType.Text, text) { } public IText Split(int offset) { int length = base.Length; if (offset > length) throw new DomException(DomError.IndexSizeError); int count = length - offset; string text = Substring(offset, count); TextNode newNode = new TextNode(base.Owner, text); Node parent = base.Parent; Document owner = base.Owner; if (parent != null) { int index = this.Index(); parent.InsertBefore(newNode, base.NextSibling); owner.ForEachRange(delegate(Range m) { if (m.Head == this) return m.Start > offset; return false; }, delegate(Range m) { m.StartWith(newNode, m.Start - offset); }); owner.ForEachRange(delegate(Range m) { if (m.Tail == this) return m.End > offset; return false; }, delegate(Range m) { m.EndWith(newNode, m.End - offset); }); owner.ForEachRange(delegate(Range m) { if (m.Head == parent) return m.Start == index + 1; return false; }, delegate(Range m) { m.StartWith(parent, m.Start + 1); }); owner.ForEachRange(delegate(Range m) { if (m.Tail == parent) return m.End == index + 1; return false; }, delegate(Range m) { m.StartWith(parent, m.End + 1); }); } Replace(offset, count, string.Empty); if (parent != null) { owner.ForEachRange(delegate(Range m) { if (m.Head == this) return m.Start > offset; return false; }, delegate(Range m) { m.StartWith(this, offset); }); owner.ForEachRange(delegate(Range m) { if (m.Tail == this) return m.End > offset; return false; }, delegate(Range m) { m.EndWith(this, offset); }); } return newNode; } public override Node Clone(Document owner, bool deep) { TextNode textNode = new TextNode(owner, base.Data); CloneNode(textNode, owner, deep); return textNode; } } }