AngleSharp by Florian Rappl

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

 ConfigurationExtensions

Represents a helper to construct objects with externally defined classes and libraries.
using AngleSharp.Dom; using AngleSharp.Network; using AngleSharp.Services; using AngleSharp.Services.Media; using System; using System.Collections.Generic; using System.Diagnostics; using System.Globalization; using System.IO; using System.Text; using System.Threading; using System.Threading.Tasks; namespace AngleSharp.Extensions { [DebuggerStepThrough] internal static class ConfigurationExtensions { public static Encoding DefaultEncoding(this IConfiguration configuration) { if (configuration == null) configuration = Configuration.Default; return TextEncoding.Suggest(configuration.GetLanguage()); } public static CultureInfo GetCulture(this IConfiguration options) { return options.Culture ?? CultureInfo.CurrentUICulture; } public static CultureInfo GetCultureFromLanguage(this IConfiguration options, string language) { try { return new CultureInfo(language); } catch (CultureNotFoundException) { return options.GetCulture(); } } public static string GetLanguage(this IConfiguration options) { return options.GetCulture().Name; } public static TService GetService<TService>(this IConfiguration configuration) where TService : IService { foreach (IService service in configuration.Services) { if (service is TService) return (TService)service; } return default(TService); } public static IEnumerable<TService> GetServices<TService>(this IConfiguration configuration) where TService : IService { foreach (IService service in configuration.Services) { if (service is TService) yield return (TService)service; } } public static string GetCookie(this IConfiguration options, string origin) { ICookieService service = options.GetService<ICookieService>(); if (service != null) return service[origin]; return string.Empty; } public static void SetCookie(this IConfiguration options, string origin, string value) { ICookieService service = options.GetService<ICookieService>(); if (service != null) service[origin] = value; } public static ISpellCheckService GetSpellCheck(this IConfiguration options, string language) { ISpellCheckService result = null; CultureInfo cultureFromLanguage = options.GetCultureFromLanguage(language); foreach (ISpellCheckService service in options.GetServices<ISpellCheckService>()) { if (service.Culture.Equals(cultureFromLanguage)) return service; if (service.Culture.TwoLetterISOLanguageName == cultureFromLanguage.TwoLetterISOLanguageName) result = service; } return result; } public static IRequester GetRequester(this IConfiguration options, string protocol) { foreach (IRequester requester in options.Requesters) { if (requester.SupportsProtocol(protocol)) return requester; } return null; } public static Task<TResource> LoadResource<TResource>(this IConfiguration options, Url url) where TResource : IResourceInfo { return options.LoadResource<TResource>(url, CancellationToken.None); } public static async Task<TResource> LoadResource<TResource>(this IConfiguration options, Url url, CancellationToken cancel) where TResource : IResourceInfo { IRequester requester = options.GetRequester(url.Scheme); if (requester != null) { using (IResponse response = await requester.LoadAsync(url, cancel).ConfigureAwait(false)) { if (response == null) return default(TResource); foreach (IResourceService<TResource> service in ConfigurationExtensions.GetServices<IResourceService<TResource>>(options)) { if (service.SupportsType(response.Headers[HeaderNames.ContentType])) return await service.CreateAsync(response, cancel).ConfigureAwait(false); } } } return default(TResource); } 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, StyleOptions options, string type = null) { return configuration.GetStyleEngine(type ?? MimeTypes.Css)?.Parse(source, options); } public static IStyleSheet ParseStyling(this IConfiguration configuration, IResponse response, StyleOptions options, string type = null) { return configuration.GetStyleEngine(type ?? MimeTypes.Css)?.Parse(response, options); } 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, IResponse response, ScriptOptions options, string type = null) { if (configuration.IsScripting) configuration.GetScriptEngine(type ?? MimeTypes.DefaultJavaScript)?.Evaluate(response, options); } public static IBrowsingContext NewContext(this IConfiguration options, Sandboxes security) { IContextService service = options.GetService<IContextService>(); if (service == null) return new SimpleBrowsingContext(options, security); return service.Create(options, security); } public static IBrowsingContext FindContext(this IConfiguration options, string name) { return options.GetService<IContextService>()?.Find(name); } public static ICommandService GetCommand(this IConfiguration options, string commandId) { foreach (ICommandService service in options.GetServices<ICommandService>()) { if (service.CommandId.Equals(commandId, StringComparison.OrdinalIgnoreCase)) return service; } return null; } public static Task<Stream> LoadCached(this IConfiguration options, Url url) { return options.LoadCached(url, CancellationToken.None); } public static async Task<Stream> LoadCached(this IConfiguration options, Url url, CancellationToken cancel) { IEnumerable<ICacheLoaderService> services = options.GetServices<ICacheLoaderService>(); foreach (ICacheLoaderService item in services) { Stream stream = await item.LoadAsync(url, cancel); if (stream != null) return stream; } return null; } } }