ConfigurationExtensions
Represents a helper to construct objects with externally
defined classes and libraries.
using AngleSharp.DOM;
using AngleSharp.Infrastructure;
using AngleSharp.Network;
using System;
using System.IO;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace AngleSharp
{
internal static class ConfigurationExtensions
{
public static Encoding DefaultEncoding(this IConfiguration configuration)
{
if (configuration == null)
configuration = Configuration.Default;
return DocumentEncoding.Suggest(configuration.Language);
}
public static Task<Stream> LoadAsync(this IConfiguration configuration, Uri url)
{
return configuration.LoadAsync(url, CancellationToken.None, false);
}
public static Task<Stream> LoadAsync(this IConfiguration configuration, string url)
{
return configuration.LoadAsync(url, CancellationToken.None, false);
}
public static Task<Stream> LoadAsync(this IConfiguration configuration, string url, CancellationToken cancel, bool force = false)
{
if (!Uri.TryCreate(url, UriKind.Absolute, out Uri result))
throw new ArgumentException("The given URL does not represent a valid absolute URL.");
return configuration.LoadAsync(result, cancel, force);
}
public static async Task<Stream> LoadAsync(this IConfiguration configuration, Uri url, CancellationToken cancel, bool force = false)
{
if (!configuration.AllowRequests && !force)
return Stream.Null;
IRequester requester = configuration.GetRequester();
if (requester == null)
throw new NullReferenceException("No HTTP requester has been set up in the configuration.");
IRequest request = configuration.CreateRequest();
if (request == null)
throw new NullReferenceException("Unable to create instance of IRequest. Try changing the provided configuration.");
request.Address = url;
request.Method = HttpMethod.Get;
return (await requester.RequestAsync(request, cancel)).Content;
}
public static Task<Stream> SendAsync(this IConfiguration configuration, Uri url, Stream content = null, string mimeType = null, HttpMethod method = HttpMethod.Post)
{
return configuration.SendAsync(url, content, mimeType, method, CancellationToken.None, false);
}
public static async Task<Stream> SendAsync(this IConfiguration configuration, Uri url, Stream content, string mimeType, HttpMethod method, CancellationToken cancel, bool force = false)
{
if (!configuration.AllowRequests && !force)
return Stream.Null;
IRequester requester = configuration.GetRequester();
if (requester == null)
throw new NullReferenceException("No HTTP requester has been set up in the configuration.");
IRequest request = configuration.CreateRequest();
if (request == null)
throw new NullReferenceException("Unable to create instance of IRequest. Try changing the provided configuration.");
request.Address = url;
request.Content = content;
if (mimeType != null)
request.Headers[HeaderNames.ContentType] = mimeType;
request.Method = method;
return (await requester.RequestAsync(request, cancel)).Content;
}
public static IStyleEngine GetStyleEngine(this IConfiguration configuration, string type)
{
foreach (IStyleEngine styleEngine in configuration.StyleEngines) {
if (styleEngine.Type.Equals(type, StringComparison.OrdinalIgnoreCase))
return styleEngine;
}
return null;
}
public static IStyleSheet ParseStyling(this IConfiguration configuration, string source, IElement owner = null, string type = null)
{
if (configuration.IsStyling) {
IStyleEngine styleEngine = configuration.GetStyleEngine(type ?? MimeTypes.Css);
if (styleEngine != null)
return styleEngine.CreateStyleSheetFor(source, owner);
}
return null;
}
public static IStyleSheet ParseStyling(this IConfiguration configuration, Stream source, IElement owner = null, string type = null)
{
if (configuration.IsStyling) {
IStyleEngine styleEngine = configuration.GetStyleEngine(type ?? MimeTypes.Css);
if (styleEngine != null)
return styleEngine.CreateStyleSheetFor(source, owner);
}
return null;
}
public static IScriptEngine GetScriptEngine(this IConfiguration configuration, string type)
{
foreach (IScriptEngine scriptEngine in configuration.ScriptEngines) {
if (scriptEngine.Type.Equals(type, StringComparison.OrdinalIgnoreCase))
return scriptEngine;
}
return null;
}
public static void RunScript(this IConfiguration configuration, string source, ScriptOptions options, string type = null)
{
if (configuration.IsScripting)
configuration.GetScriptEngine(type ?? MimeTypes.DefaultJavaScript)?.Evaluate(source, options);
}
public static void RunScript(this IConfiguration configuration, Stream source, ScriptOptions options, string type = null)
{
if (configuration.IsScripting)
configuration.GetScriptEngine(type ?? MimeTypes.DefaultJavaScript)?.Evaluate(source, options);
}
}
}