HtmlParser
Creates an instance of the HTML parser front-end.
using AngleSharp.Browser;
using AngleSharp.Dom;
using AngleSharp.Html.Dom;
using AngleSharp.Html.Dom.Events;
using AngleSharp.Text;
using System.IO;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace AngleSharp.Html.Parser
{
[System.Runtime.CompilerServices.NullableContext(1)]
[System.Runtime.CompilerServices.Nullable(0)]
public class HtmlParser : EventTarget, IHtmlParser, IParser, IEventTarget
{
private readonly HtmlParserOptions _options;
private readonly IBrowsingContext _context;
public HtmlParserOptions Options => _options;
public event DomEventHandler Parsing {
add {
AddEventListener(EventNames.Parsing, value, false);
}
remove {
RemoveEventListener(EventNames.Parsing, value, false);
}
}
public event DomEventHandler Parsed {
add {
AddEventListener(EventNames.Parsed, value, false);
}
remove {
RemoveEventListener(EventNames.Parsed, value, false);
}
}
public event DomEventHandler Error {
add {
AddEventListener(EventNames.Error, value, false);
}
remove {
RemoveEventListener(EventNames.Error, value, false);
}
}
public HtmlParser()
: this(null)
{
}
public HtmlParser(HtmlParserOptions options)
: this(options, null)
{
}
[System.Runtime.CompilerServices.NullableContext(2)]
internal HtmlParser(IBrowsingContext context)
: this(new HtmlParserOptions {
IsScripting = (context != null && context.IsScripting())
}, context)
{
}
[System.Runtime.CompilerServices.NullableContext(2)]
public HtmlParser(HtmlParserOptions options, IBrowsingContext context)
{
_options = options;
_context = (context ?? BrowsingContext.NewFrom((IHtmlParser)this));
}
public IHtmlDocument ParseDocument(string source)
{
HtmlDocument document = CreateDocument(source);
return Parse(document, null);
}
[return: System.Runtime.CompilerServices.Nullable(2)]
public IHtmlHeadElement ParseHead(string source)
{
HtmlDocument document = CreateDocument(source);
return Parse(document, TagNames.Head).Head;
}
public INodeList ParseFragment(Stream source, IElement contextElement)
{
HtmlDocument document = CreateDocument(source);
return ParseFragment(document, contextElement);
}
public INodeList ParseFragment(string source, IElement contextElement)
{
HtmlDocument document = CreateDocument(source);
return ParseFragment(document, contextElement);
}
public IHtmlDocument ParseDocument(Stream source)
{
HtmlDocument document = CreateDocument(source);
return Parse(document, null);
}
[return: System.Runtime.CompilerServices.Nullable(2)]
public IHtmlHeadElement ParseHead(Stream source)
{
HtmlDocument document = CreateDocument(source);
return Parse(document, TagNames.Head).Head;
}
public Task<IHtmlDocument> ParseDocumentAsync(string source, CancellationToken cancel)
{
HtmlDocument document = CreateDocument(source);
return ParseAsync(document, cancel, null);
}
public Task<IHtmlDocument> ParseDocumentAsync(Stream source, CancellationToken cancel)
{
HtmlDocument document = CreateDocument(source);
return ParseAsync(document, cancel, null);
}
[AsyncStateMachine(typeof(<ParseHeadAsync>d__25))]
[return: System.Runtime.CompilerServices.Nullable(new byte[] {
1,
2
})]
public Task<IHtmlHeadElement> ParseHeadAsync(string source, CancellationToken cancel)
{
<ParseHeadAsync>d__25 stateMachine = default(<ParseHeadAsync>d__25);
stateMachine.<>t__builder = AsyncTaskMethodBuilder<IHtmlHeadElement>.Create();
stateMachine.<>4__this = this;
stateMachine.source = source;
stateMachine.cancel = cancel;
stateMachine.<>1__state = -1;
stateMachine.<>t__builder.Start(ref stateMachine);
return stateMachine.<>t__builder.Task;
}
[AsyncStateMachine(typeof(<ParseHeadAsync>d__26))]
[return: System.Runtime.CompilerServices.Nullable(new byte[] {
1,
2
})]
public Task<IHtmlHeadElement> ParseHeadAsync(Stream source, CancellationToken cancel)
{
<ParseHeadAsync>d__26 stateMachine = default(<ParseHeadAsync>d__26);
stateMachine.<>t__builder = AsyncTaskMethodBuilder<IHtmlHeadElement>.Create();
stateMachine.<>4__this = this;
stateMachine.source = source;
stateMachine.cancel = cancel;
stateMachine.<>1__state = -1;
stateMachine.<>t__builder.Start(ref stateMachine);
return stateMachine.<>t__builder.Task;
}
[AsyncStateMachine(typeof(<AngleSharp-Html-Parser-IHtmlParser-ParseDocumentAsync>d__27))]
Task<IDocument> IHtmlParser.ParseDocumentAsync(IDocument document, CancellationToken cancel)
{
<AngleSharp-Html-Parser-IHtmlParser-ParseDocumentAsync>d__27 stateMachine = default(<AngleSharp-Html-Parser-IHtmlParser-ParseDocumentAsync>d__27);
stateMachine.<>t__builder = AsyncTaskMethodBuilder<IDocument>.Create();
stateMachine.<>4__this = this;
stateMachine.document = document;
stateMachine.cancel = cancel;
stateMachine.<>1__state = -1;
stateMachine.<>t__builder.Start(ref stateMachine);
return stateMachine.<>t__builder.Task;
}
private HtmlDocument CreateDocument(string source)
{
TextSource textSource = new TextSource(source);
return CreateDocument(textSource);
}
private HtmlDocument CreateDocument(Stream source)
{
Encoding defaultEncoding = _context.GetDefaultEncoding();
TextSource textSource = new TextSource(source, defaultEncoding);
return CreateDocument(textSource);
}
private HtmlDocument CreateDocument(TextSource textSource)
{
return new HtmlDocument(_context, textSource);
}
private HtmlDomBuilder CreateBuilder(HtmlDocument document, [System.Runtime.CompilerServices.Nullable(2)] string stopAt)
{
HtmlDomBuilder htmlDomBuilder = new HtmlDomBuilder(document, stopAt);
if (HasEventListener(EventNames.Error))
htmlDomBuilder.Error += delegate(object _, HtmlErrorEvent ev) {
InvokeEventListener(ev);
};
return htmlDomBuilder;
}
private IHtmlDocument Parse(HtmlDocument document, [System.Runtime.CompilerServices.Nullable(2)] string stopAt = null)
{
HtmlDomBuilder htmlDomBuilder = CreateBuilder(document, stopAt);
InvokeHtmlParseEvent(document, false);
htmlDomBuilder.Parse(_options);
InvokeHtmlParseEvent(document, true);
return document;
}
[AsyncStateMachine(typeof(<ParseAsync>d__33))]
private Task<IHtmlDocument> ParseAsync(HtmlDocument document, CancellationToken cancel, [System.Runtime.CompilerServices.Nullable(2)] string stopAt = null)
{
<ParseAsync>d__33 stateMachine = default(<ParseAsync>d__33);
stateMachine.<>t__builder = AsyncTaskMethodBuilder<IHtmlDocument>.Create();
stateMachine.<>4__this = this;
stateMachine.document = document;
stateMachine.cancel = cancel;
stateMachine.stopAt = stopAt;
stateMachine.<>1__state = -1;
stateMachine.<>t__builder.Start(ref stateMachine);
return stateMachine.<>t__builder.Task;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
private void InvokeHtmlParseEvent(HtmlDocument document, bool completed)
{
if (base.HasEventListeners)
InvokeEventListener(new HtmlParseEvent(document, completed));
}
private INodeList ParseFragment(HtmlDocument document, IElement contextElement)
{
HtmlDomBuilder htmlDomBuilder = new HtmlDomBuilder(document, null);
Element element = contextElement as Element;
if (element != null) {
element = document.CreateElementFrom(element.LocalName, element.Prefix, NodeFlags.None);
IElement documentElement = htmlDomBuilder.ParseFragment(_options, element).DocumentElement;
element.AppendNodes(documentElement.ChildNodes.ToArray());
return element.ChildNodes;
}
return htmlDomBuilder.Parse(_options).ChildNodes;
}
}
}