AngleSharp by AngleSharp

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

.NET API 1,224,192 bytes

 TextNode

Represents a text node.
using AngleSharp.Dom.Collections; using AngleSharp.Extensions; using AngleSharp.Html; using System.IO; 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 = Pool.NewStringBuilder(); 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 override INode Clone(bool deep = true) { TextNode textNode = new TextNode(base.Owner, base.Data); CloneNode(textNode, deep); return textNode; } 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 void ToHtml(TextWriter writer, IMarkupFormatter formatter) { if (base.Parent != null && (base.Parent.Flags & NodeFlags.LiteralText) == NodeFlags.LiteralText) writer.Write(base.Data); else base.ToHtml(writer, formatter); } } }