SvgDocument
sealed class SvgDocument : Document, ISvgDocument, IDocument, INode, IEventTarget, IMarkupFormattable, IParentNode, IGlobalEventHandlers, IDocumentStyle, INonElementParentNode, IDisposable
Represents a document node that contains only SVG nodes.
using AngleSharp.Dom.Events;
using AngleSharp.Extensions;
using AngleSharp.Network;
using AngleSharp.Parser.Xml;
using System;
using System.Threading;
using System.Threading.Tasks;
namespace AngleSharp.Dom.Svg
{
internal sealed class SvgDocument : Document, ISvgDocument, IDocument, INode, IEventTarget, IMarkupFormattable, IParentNode, IGlobalEventHandlers, IDocumentStyle, INonElementParentNode, IDisposable
{
public override IElement DocumentElement => RootElement;
public ISvgSvgElement RootElement => this.FindChild<ISvgSvgElement>();
public override string Title {
get {
ISvgTitleElement svgTitleElement = RootElement.FindChild<ISvgTitleElement>();
if (svgTitleElement != null)
return svgTitleElement.TextContent.CollapseAndStrip();
return string.Empty;
}
set {
ISvgTitleElement svgTitleElement = RootElement.FindChild<ISvgTitleElement>();
if (svgTitleElement == null) {
svgTitleElement = new SvgTitleElement(this, null);
RootElement.AppendChild(svgTitleElement);
}
svgTitleElement.TextContent = value;
}
}
internal SvgDocument(IBrowsingContext context, TextSource source)
: base(context, source)
{
base.ContentType = MimeTypes.Svg;
}
internal SvgDocument(IBrowsingContext context = null)
: this(context, new TextSource(string.Empty))
{
}
public override INode Clone(bool deep = true)
{
SvgDocument svgDocument = new SvgDocument(base.Context, new TextSource(base.Source.Text));
Node.CopyProperties(this, svgDocument, deep);
Document.CopyDocumentProperties(this, svgDocument, deep);
return svgDocument;
}
internal static async Task<SvgDocument> LoadAsync(IBrowsingContext context, IResponse response, TextSource source, CancellationToken cancelToken)
{
string contentType = response.Headers.GetOrDefault(HeaderNames.ContentType, MimeTypes.Svg);
SvgDocument document = new SvgDocument(context, source);
XmlParser parser = new XmlParser(document);
document.ContentType = contentType;
document.Referrer = response.Headers.GetOrDefault(HeaderNames.Referer, string.Empty);
document.DocumentUri = response.Address.Href;
document.Cookie = response.Headers.GetOrDefault(HeaderNames.SetCookie, string.Empty);
document.ReadyState = DocumentReadyState.Loading;
await parser.ParseAsync(cancelToken).ConfigureAwait(false);
return document;
}
}
}