AngleSharp by AngleSharp

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

.NET API 1,214,976 bytes

 ValueExtensions

static class ValueExtensions
A bunch of useful extension methods.
using AngleSharp.Css.Values; using AngleSharp.Dom.Css; using AngleSharp.Parser.Css; using System; using System.Collections.Generic; using System.Linq; namespace AngleSharp.Extensions { internal static class ValueExtensions { public static CssToken OnlyOrDefault(this IEnumerable<CssToken> value) { CssToken cssToken = null; foreach (CssToken item in value) { if (cssToken != null) return null; cssToken = item; } return cssToken; } public static bool Is(this IEnumerable<CssToken> value, string expected) { return value.ToIdentifier()?.Isi(expected) ?? false; } public static string ToUri(this IEnumerable<CssToken> value) { CssToken cssToken = value.OnlyOrDefault(); if (cssToken != null && cssToken.Type == CssTokenType.Url) return cssToken.Data; return null; } public static Length? ToDistance(this IEnumerable<CssToken> value) { Percent? nullable = value.ToPercent(); if (nullable.HasValue) return new Length(nullable.Value.Value, Length.Unit.Percent); return value.ToLength(); } public static Length ToLength(this FontSize fontSize) { switch (fontSize) { case FontSize.Big: return new Length(1.5, Length.Unit.Em); case FontSize.Huge: return new Length(2, Length.Unit.Em); case FontSize.Large: return new Length(1.2, Length.Unit.Em); case FontSize.Larger: return new Length(120, Length.Unit.Percent); case FontSize.Little: return new Length(0.75, Length.Unit.Em); case FontSize.Small: return new Length(0.8888889, Length.Unit.Em); case FontSize.Smaller: return new Length(80, Length.Unit.Percent); case FontSize.Tiny: return new Length(0.6, Length.Unit.Em); default: return new Length(1, Length.Unit.Em); } } public static Percent? ToPercent(this IEnumerable<CssToken> value) { CssToken cssToken = value.OnlyOrDefault(); if (cssToken != null && cssToken.Type == CssTokenType.Percentage) return new Percent(((CssUnitToken)cssToken).Value); return null; } public static string ToCssString(this IEnumerable<CssToken> value) { CssToken cssToken = value.OnlyOrDefault(); if (cssToken != null && cssToken.Type == CssTokenType.String) return cssToken.Data; return null; } public static string ToLiterals(this IEnumerable<CssToken> value) { List<string> list = new List<string>(); IEnumerator<CssToken> enumerator = value.GetEnumerator(); if (enumerator.MoveNext()) { do { if (enumerator.Current.Type != CssTokenType.Ident) return null; list.Add(enumerator.Current.Data); if (enumerator.MoveNext() && enumerator.Current.Type != CssTokenType.Whitespace) return null; } while (enumerator.MoveNext()); return string.Join(" ", list); } return null; } public static string ToIdentifier(this IEnumerable<CssToken> value) { CssToken cssToken = value.OnlyOrDefault(); if (cssToken != null && cssToken.Type == CssTokenType.Ident) return cssToken.Data.ToLowerInvariant(); return null; } public static string ToAnimatableIdentifier(this IEnumerable<CssToken> value) { string text = value.ToIdentifier(); if (text != null && (text.Isi(Keywords.All) || Factory.Properties.IsAnimatable(text))) return text; return null; } public static float? ToSingle(this IEnumerable<CssToken> value) { CssToken cssToken = value.OnlyOrDefault(); if (cssToken != null && cssToken.Type == CssTokenType.Number) return ((CssNumberToken)cssToken).Value; return null; } public static float? ToNaturalSingle(this IEnumerable<CssToken> value) { float? result = value.ToSingle(); if (!result.HasValue || !(result.Value >= 0)) return null; return result; } public static int? ToInteger(this IEnumerable<CssToken> value) { CssToken cssToken = value.OnlyOrDefault(); if (cssToken != null && cssToken.Type == CssTokenType.Number && ((CssNumberToken)cssToken).IsInteger) return ((CssNumberToken)cssToken).IntegerValue; return null; } public static int? ToNaturalInteger(this IEnumerable<CssToken> value) { int? result = value.ToInteger(); if (!result.HasValue || result.Value < 0) return null; return result; } public static int? ToPositiveInteger(this IEnumerable<CssToken> value) { int? result = value.ToInteger(); if (!result.HasValue || result.Value <= 0) return null; return result; } public static int? ToWeightInteger(this IEnumerable<CssToken> value) { int? result = value.ToPositiveInteger(); if (!result.HasValue || !IsWeight(result.Value)) return null; return result; } public static int? ToBinary(this IEnumerable<CssToken> value) { int? result = value.ToInteger(); if (!result.HasValue || (result.Value != 0 && result.Value != 1)) return null; return result; } public static float? ToAlphaValue(this IEnumerable<CssToken> value) { float? nullable = value.ToNaturalSingle(); if (!nullable.HasValue) { Percent? nullable2 = value.ToPercent(); if (!nullable2.HasValue) return null; return nullable2.Value.NormalizedValue; } return Math.Min(nullable.Value, 1); } public static byte? ToRgbComponent(this IEnumerable<CssToken> value) { int? nullable = value.ToNaturalInteger(); if (!nullable.HasValue) { Percent? nullable2 = value.ToPercent(); if (!nullable2.HasValue) return null; return (byte)(255 * nullable2.Value.NormalizedValue); } return (byte)Math.Min(nullable.Value, 255); } public static Angle? ToAngle(this IEnumerable<CssToken> value) { CssToken cssToken = value.OnlyOrDefault(); if (cssToken != null && cssToken.Type == CssTokenType.Dimension) { CssUnitToken cssUnitToken = (CssUnitToken)cssToken; Angle.Unit unit = Angle.GetUnit(cssUnitToken.Unit); if (unit != 0) return new Angle(cssUnitToken.Value, unit); } return null; } public static Angle? ToAngleNumber(this IEnumerable<CssToken> value) { Angle? nullable = value.ToAngle(); if (!nullable.HasValue) { float? nullable2 = value.ToSingle(); if (!nullable2.HasValue) return null; return new Angle(nullable2.Value, Angle.Unit.Deg); } return nullable.Value; } public static Frequency? ToFrequency(this IEnumerable<CssToken> value) { CssToken cssToken = value.OnlyOrDefault(); if (cssToken != null && cssToken.Type == CssTokenType.Dimension) { CssUnitToken cssUnitToken = (CssUnitToken)cssToken; Frequency.Unit unit = Frequency.GetUnit(cssUnitToken.Unit); if (unit != 0) return new Frequency(cssUnitToken.Value, unit); } return null; } public static Length? ToLength(this IEnumerable<CssToken> value) { CssToken cssToken = value.OnlyOrDefault(); if (cssToken != null) { if (cssToken.Type == CssTokenType.Dimension) { CssUnitToken cssUnitToken = (CssUnitToken)cssToken; Length.Unit unit = Length.GetUnit(cssUnitToken.Unit); if (unit != 0) return new Length(cssUnitToken.Value, unit); } else if (cssToken.Type == CssTokenType.Number && ((CssNumberToken)cssToken).Value == 0) { return Length.Zero; } } return null; } public static Resolution? ToResolution(this IEnumerable<CssToken> value) { CssToken cssToken = value.OnlyOrDefault(); if (cssToken != null && cssToken.Type == CssTokenType.Dimension) { CssUnitToken cssUnitToken = (CssUnitToken)cssToken; Resolution.Unit unit = Resolution.GetUnit(cssUnitToken.Unit); if (unit != 0) return new Resolution(cssUnitToken.Value, unit); } return null; } public static Time? ToTime(this IEnumerable<CssToken> value) { CssToken cssToken = value.OnlyOrDefault(); if (cssToken != null && cssToken.Type == CssTokenType.Dimension) { CssUnitToken cssUnitToken = (CssUnitToken)cssToken; Time.Unit unit = Time.GetUnit(cssUnitToken.Unit); if (unit != 0) return new Time(cssUnitToken.Value, unit); } return null; } public static Length? ToBorderWidth(this IEnumerable<CssToken> value) { Length? result = value.ToLength(); if (result.HasValue) return result; if (value.Is(Keywords.Thin)) return Length.Thin; if (value.Is(Keywords.Medium)) return Length.Medium; if (value.Is(Keywords.Thick)) return Length.Thick; return result; } public static List<List<CssToken>> ToItems(this IEnumerable<CssToken> value) { List<List<CssToken>> list = new List<List<CssToken>>(); List<CssToken> list2 = new List<CssToken>(); int num = 0; list.Add(list2); foreach (CssToken item in value) { bool flag = item.Type == CssTokenType.Whitespace; bool flag2 = item.Type == CssTokenType.String || item.Type == CssTokenType.Url || item.Type == CssTokenType.Function; if (num == 0 && (flag | flag2)) { if (list2.Count != 0) { list2 = new List<CssToken>(); list.Add(list2); } if (flag) continue; } else if (item.Type == CssTokenType.RoundBracketOpen) { num++; } else if (item.Type == CssTokenType.RoundBracketClose) { num--; } list2.Add(item); } return list; } public static void Trim(this List<CssToken> value) { int num = 0; int num2 = value.Count - 1; while (num < num2) { if (value[num].Type == CssTokenType.Whitespace) num++; else { if (value[num2].Type != CssTokenType.Whitespace) break; num2--; } } value.RemoveRange(++num2, value.Count - num2); value.RemoveRange(0, num); } public static List<List<CssToken>> ToList(this IEnumerable<CssToken> value) { List<List<CssToken>> list = new List<List<CssToken>>(); List<CssToken> list2 = new List<CssToken>(); int num = 0; list.Add(list2); foreach (CssToken item in value) { if (num == 0 && item.Type == CssTokenType.Comma) { list2 = new List<CssToken>(); list.Add(list2); } else { if (item.Type == CssTokenType.RoundBracketOpen) num++; else if (item.Type == CssTokenType.RoundBracketClose) { num--; } else if (item.Type == CssTokenType.Whitespace && list2.Count == 0) { continue; } list2.Add(item); } } for (int i = 0; i < list.Count; i++) { list[i].Trim(); } return list; } public static string ToText(this IEnumerable<CssToken> value) { return string.Join(string.Empty, from m in value select m.ToValue()); } public static Color? ToColor(this IEnumerable<CssToken> value) { CssToken cssToken = value.OnlyOrDefault(); if (cssToken != null && cssToken.Type == CssTokenType.Ident) return Color.FromName(cssToken.Data); if (cssToken != null && cssToken.Type == CssTokenType.Color && !((CssColorToken)cssToken).IsBad) return Color.FromHex(cssToken.Data); return null; } private static bool IsWeight(int value) { if (value != 100 && value != 200 && value != 300 && value != 400 && value != 500 && value != 600 && value != 700 && value != 800) return value == 900; return true; } } }