ArgumentsValueConverter
using AngleSharp.Dom.Css;
using AngleSharp.Extensions;
using AngleSharp.Parser.Css;
using System.Collections.Generic;
using System.Linq;
namespace AngleSharp.Css.ValueConverters
{
internal sealed class ArgumentsValueConverter : IValueConverter
{
private sealed class ArgumentsValue : IPropertyValue
{
private readonly IPropertyValue[] _arguments;
private readonly CssValue _value;
public string CssText => string.Join(", ", from m in _arguments
where !string.IsNullOrEmpty(m.CssText)
select m.CssText);
public CssValue Original => _value;
public ArgumentsValue(IPropertyValue[] arguments, IEnumerable<CssToken> tokens)
{
_arguments = arguments;
_value = new CssValue(tokens);
}
public CssValue ExtractFor(string name)
{
return _value;
}
}
private readonly IValueConverter[] _converters;
public ArgumentsValueConverter(params IValueConverter[] converters)
{
_converters = converters;
}
public IPropertyValue Convert(IEnumerable<CssToken> value)
{
List<List<CssToken>> list = value.ToList();
int num = _converters.Length;
if (list.Count <= num) {
IPropertyValue[] array = new IPropertyValue[num];
for (int i = 0; i < num; i++) {
IEnumerable<CssToken> value2 = (i < list.Count) ? list[i] : Enumerable.Empty<CssToken>();
array[i] = _converters[i].Convert(value2);
if (array[i] == null)
return null;
}
return new ArgumentsValue(array, value);
}
return null;
}
public IPropertyValue Construct(CssProperty[] properties)
{
return properties.Guard<ArgumentsValue>();
}
}
}