コード例 #1
0
            public ICssValue[] Split(ICssValue value)
            {
                var options = value as CssTupleValue;

                if (options != null)
                {
                    return(new[]
                    {
                        options.Items[0],
                        options.Items[1],
                        options.Items[2],
                    });
                }

                return(null);
            }
コード例 #2
0
            public ICssValue[] Split(ICssValue value)
            {
                if (value is CssListValue list)
                {
                    var points = list.Items.OfType <Point>();
                    var x      = points.Select(m => m.X).ToArray();
                    var y      = points.Select(m => m.Y).ToArray();
                    return(new ICssValue[]
                    {
                        new CssListValue(x),
                        new CssListValue(y),
                    });
                }

                return(null);
            }
コード例 #3
0
            public ICssValue[] Split(ICssValue value)
            {
                if (value is CssListValue list)
                {
                    var repeats = list.Items.OfType <CssImageRepeatsValue>();
                    var h       = repeats.Select(m => m.Horizontal).ToArray();
                    var v       = repeats.Select(m => m.Vertical).ToArray();
                    return(new ICssValue[]
                    {
                        new CssListValue(h),
                        new CssListValue(v),
                    });
                }

                return(null);
            }
コード例 #4
0
        public Boolean Validate(ICssValue value)
        {
            var items = value.AsEnumeration();
            var count = 0;

            foreach (var item in items)
            {
                if (count > _maximum || !_converter.Validate(item))
                {
                    return(false);
                }

                count++;
            }

            return(count >= _minimum);
        }
コード例 #5
0
            public ICssValue[] Split(ICssValue value)
            {
                var list = value as CssListValue;

                if (list != null)
                {
                    return(new[]
                    {
                        CreateMultiple(list, 0),
                        CreateMultiple(list, 1),
                        CreateMultiple(list, 2),
                        CreateMultiple(list, 3),
                    });
                }

                return(null);
            }
コード例 #6
0
            public ICssValue[] Split(ICssValue value)
            {
                var radius = value as BorderRadius;

                if (radius != null)
                {
                    return(new[]
                    {
                        Both(radius.Horizontal.Top, radius.Vertical.Top),
                        Both(radius.Horizontal.Right, radius.Vertical.Right),
                        Both(radius.Horizontal.Bottom, radius.Vertical.Bottom),
                        Both(radius.Horizontal.Left, radius.Vertical.Left),
                    });
                }

                return(null);
            }
コード例 #7
0
            public ICssValue[] Split(ICssValue value)
            {
                var periodic = value as Periodic <ICssValue>;

                if (periodic != null)
                {
                    return(new[]
                    {
                        periodic.Top,
                        periodic.Right,
                        periodic.Bottom,
                        periodic.Left,
                    });
                }

                return(null);
            }
コード例 #8
0
            public ICssValue[] Split(ICssValue value)
            {
                var tuple = value as CssTupleValue;

                if (tuple != null)
                {
                    return(new[]
                    {
                        tuple.Items[0],
                        GetItem(tuple, 1),
                        GetItem(tuple, 2),
                        GetItem(tuple, 3),
                    });
                }

                return(null);
            }
コード例 #9
0
            private static ICssValue CreateValue(CssListValue animatable, CssListValue duration, CssListValue timing, CssListValue delay)
            {
                var items  = (animatable ?? duration ?? timing ?? delay).Items;
                var layers = new ICssValue[items.Length];

                for (var i = 0; i < items.Length; i++)
                {
                    layers[i] = new CssTupleValue(new[]
                    {
                        GetValue(animatable, i),
                        GetValue(duration, i),
                        GetValue(timing, i),
                        GetValue(delay, i),
                    });
                }

                return(new CssListValue(layers));
            }
コード例 #10
0
        public static CssValueList CopyToList(this ICssValue value)
        {
            var original = value as CssValueList;

            if (original == null)
            {
                return(new CssValueList(value));
            }

            var newList = new CssValueList();

            foreach (var item in original)
            {
                newList.Add(item);
            }

            return(newList);
        }
コード例 #11
0
            public ICssValue[] Split(ICssValue value)
            {
                var font = value as FontInfo;

                if (font == null)
                {
                    var systemFont = value as Constant <SystemFont>;

                    if (systemFont == null)
                    {
                        return(null);
                    }

                    return(new[] { systemFont, null, null, null, null, null, null });
                }

                return(new[] { font.FontFamilies, font.Size, font.Variant, font.Weight, font.Stretch, font.Style, font.LineHeight });
            }
コード例 #12
0
 protected override Boolean IsValid(ICssValue value)
 {
     return(Converter.TryConvert(value, m =>
     {
         _topWidth.TrySetValue(m.Item1);
         _topStyle.TrySetValue(m.Item2);
         _topColor.TrySetValue(m.Item3);
         _leftWidth.TrySetValue(m.Item1);
         _leftStyle.TrySetValue(m.Item2);
         _leftColor.TrySetValue(m.Item3);
         _rightWidth.TrySetValue(m.Item1);
         _rightStyle.TrySetValue(m.Item2);
         _rightColor.TrySetValue(m.Item3);
         _bottomWidth.TrySetValue(m.Item1);
         _bottomStyle.TrySetValue(m.Item2);
         _bottomColor.TrySetValue(m.Item3);
     }));
 }
コード例 #13
0
        public static Length?ToBorderSlice(this ICssValue value)
        {
            var percent = value.ToPercent();

            if (percent.HasValue)
            {
                return(new Length(percent.Value.Value, Length.Unit.Percent));
            }

            var number = value.ToSingle();

            if (number.HasValue)
            {
                return(new Length(number.Value, Length.Unit.Px));
            }

            return(null);
        }
コード例 #14
0
        public ICssValue Convert(StringSource source)
        {
            var options = new ICssValue[_converters.Length];

            for (var i = 0; i < _converters.Length; i++)
            {
                var option = _converters[i].Convert(source);

                if (option == null)
                {
                    break;
                }

                source.SkipSpacesAndComments();
                options[i] = option;
            }

            return(new CssTupleValue(options));
        }
コード例 #15
0
            public ICssValue[] Split(ICssValue value)
            {
                if (value is CssBackgroundValue background)
                {
                    return(new[]
                    {
                        CreateMultiple(background, m => m.Image, InitialValues.BackgroundImageDecl),
                        CreateMultiple(background, m => m.Position, InitialValues.BackgroundPositionDecl),
                        CreateMultiple(background, m => m.Size, InitialValues.BackgroundSizeDecl),
                        CreateMultiple(background, m => m.Repeat, InitialValues.BackgroundRepeatDecl),
                        CreateMultiple(background, m => m.Attachment, InitialValues.BackgroundAttachmentDecl),
                        CreateMultiple(background, m => m.Origin, InitialValues.BackgroundOriginDecl),
                        CreateMultiple(background, m => m.Clip, InitialValues.BackgroundClipDecl),
                        background.Color,
                    });
                }

                return(null);
            }
コード例 #16
0
        public Boolean Validate(ICssValue value)
        {
            var items = value as CssValueList;

            if (items == null || items.Length != _arguments)
            {
                return(false);
            }

            for (int i = 0; i < _arguments; i++)
            {
                if (!_converter.Validate(items[i]))
                {
                    return(false);
                }
            }

            return(true);
        }
コード例 #17
0
            public ICssValue Merge(ICssValue[] values)
            {
                var x = values[0] as CssListValue;
                var y = values[1] as CssListValue;

                if (x != null && y != null && x.Items.Length == y.Items.Length)
                {
                    var points = new ICssValue[x.Items.Length];

                    for (var i = 0; i < points.Length; i++)
                    {
                        points[i] = new Point(x.Items[i], y.Items[i]);
                    }

                    return(new CssListValue(points));
                }

                return(null);
            }
コード例 #18
0
            public ICssValue Merge(ICssValue[] values)
            {
                var h = values[0] as CssListValue;
                var v = values[1] as CssListValue;

                if (h != null && v != null && h.Items.Length == v.Items.Length)
                {
                    var repeats = new ICssValue[h.Items.Length];

                    for (var i = 0; i < repeats.Length; i++)
                    {
                        repeats[i] = new CssImageRepeatsValue(h.Items[i], v.Items[i]);
                    }

                    return(new CssListValue(repeats));
                }

                return(null);
            }
コード例 #19
0
            public ICssValue[] Split(ICssValue value)
            {
                if (value is CssListValue list)
                {
                    return(new[]
                    {
                        CreateMultiple(list, 0),
                        CreateMultiple(list, 1),
                        CreateMultiple(list, 2),
                        CreateMultiple(list, 3),
                        CreateMultiple(list, 4),
                        CreateMultiple(list, 5),
                        CreateMultiple(list, 6),
                        CreateMultiple(list, 7),
                    });
                }

                return(null);
            }
コード例 #20
0
        public static Length?ToDistance(this ICssValue value)
        {
            var percent = value as Percent?;

            if (percent == null)
            {
                var number = value as Number?;

                if (number.HasValue && number.Value == Number.Zero)
                {
                    return(Length.Zero);
                }
            }
            else
            {
                return(new Length(percent.Value.Value, Length.Unit.Percent));
            }

            return(value as Length?);
        }
コード例 #21
0
        /// <summary>
        /// Tries to set the given value.
        /// </summary>
        /// <param name="value">The value that should be used.</param>
        /// <returns>True if the given value is accepted, otherwise false.</returns>
        internal Boolean TrySetValue(ICssValue value)
        {
            var result = false;

            if (value == null)
            {
                result = !IsMinimum && !IsMaximum && TrySetDefault();
            }
            else
            {
                result = TrySetCustom(value);
            }

            if (result)
            {
                _value = value;
            }

            return(result);
        }
コード例 #22
0
        public Boolean Validate(ICssValue value)
        {
            var values = value as CssValueList;
            var end    = default(ICssValue);

            if (values != null)
            {
                var items = values.ToList();
                end = items[items.Count - 1].Reduce();
                items.RemoveAt(items.Count - 1);
                values = new CssValueList(items.Select(m => m.Reduce()).ToList());
            }
            else
            {
                values = new CssValueList();
                end    = value;
            }

            return(_endConverter.Validate(end) && (values.Length == 0 || _listConverter.Validate(values)));
        }
コード例 #23
0
        /// <summary>
        /// Determines if the given value represents a valid state of this property.
        /// </summary>
        /// <param name="value">The state that should be used.</param>
        /// <returns>True if the state is valid, otherwise false.</returns>
        protected override Boolean IsValid(ICssValue value)
        {
            //[ <bg-layer> , ]* <final-bg-layer> where:
            //  <bg-layer> =
            //      <bg-image> || <position> [ / <bg-size> ]? || <repeat-style> || <attachment> || <box> || <box>
            //  <final-bg-layer> =
            //      <bg-image> || <position> [ / <bg-size> ]? || <repeat-style> || <attachment> || <box> || <box> || <background-color>

            return(Converter.TryConvert(value, m =>
            {
                _image.TrySetValue(Transform(m, n => n.Item1));
                _position.TrySetValue(Transform(m, n => n.Item2.Item1));
                _size.TrySetValue(Transform(m, n => n.Item2.Item2));
                _repeat.TrySetValue(Transform(m, n => n.Item3));
                _attachment.TrySetValue(Transform(m, n => n.Item4));
                _origin.TrySetValue(Transform(m, n => n.Item5));
                _clip.TrySetValue(Transform(m, n => n.Item6));
                _color.TrySetValue(m.Item2.Item7);
            }));
        }
コード例 #24
0
        public override ICssValue GetPropertyCssValue(string propertyName)
        {
            if (collectedStyles.ContainsKey(propertyName))
            {
                CssCollectedProperty scp = collectedStyles[propertyName];
                if (scp.CssValue.CssValueType == CssValueType.Inherit)
                {
                    // get style from parent chain
                    return(getParentStyle(propertyName));
                }
                else
                {
                    return(scp.CssValue.GetAbsoluteValue(propertyName, _element));
                }
            }
            else
            {
                // should this property inherit?
                CssXmlDocument doc = (CssXmlDocument)_element.OwnerDocument;

                if (doc.CssPropertyProfile.IsInheritable(propertyName))
                {
                    ICssValue parValue = getParentStyle(propertyName);
                    if (parValue != null)
                    {
                        return(parValue);
                    }
                }

                string initValue = doc.CssPropertyProfile.GetInitialValue(propertyName);
                if (initValue == null)
                {
                    return(null);
                }
                else
                {
                    return(CssValue.GetCssValue(initValue, false).GetAbsoluteValue(propertyName, _element));
                }
            }
        }
コード例 #25
0
            private static ICssValue CreateValue(CssListValue duration, CssListValue timing, CssListValue delay, CssListValue iterationCount, CssListValue direction, CssListValue fillMode, CssListValue playState, CssListValue name)
            {
                var items  = (duration ?? timing ?? delay ?? iterationCount ?? direction ?? fillMode ?? playState ?? name).Items;
                var layers = new ICssValue[items.Length];

                for (var i = 0; i < items.Length; i++)
                {
                    layers[i] = new CssTupleValue(new[]
                    {
                        GetValue(duration, i),
                        GetValue(timing, i),
                        GetValue(delay, i),
                        GetValue(iterationCount, i),
                        GetValue(direction, i),
                        GetValue(fillMode, i),
                        GetValue(playState, i),
                        GetValue(name, i),
                    });
                }

                return(new CssListValue(layers));
            }
コード例 #26
0
        public Boolean TryConvert(ICssValue value, Action <T[]> setResult)
        {
            var items = value.AsEnumeration().ToArray();

            if (items.Length < _minimum || items.Length > _maximum)
            {
                return(false);
            }

            var targets = new T[items.Length];

            for (var i = 0; i < items.Length; i++)
            {
                if (!_converter.TryConvert(items[i], nv => targets[i] = nv))
                {
                    return(false);
                }
            }

            setResult(targets);
            return(true);
        }
コード例 #27
0
        public Boolean TryConvert(ICssValue value, Action <T[]> setResult)
        {
            var items = value as CssValueList;

            if (items == null || items.Length != _arguments)
            {
                return(false);
            }

            var array = new T[_arguments];

            for (int i = 0; i < _arguments; i++)
            {
                if (!_converter.TryConvert(items[i], m => array[i] = m))
                {
                    return(false);
                }
            }

            setResult(array);
            return(true);
        }
コード例 #28
0
        public static Length?ToLineHeight(this ICssValue value)
        {
            var distance = value.ToDistance();

            if (distance != null)
            {
                return(distance);
            }
            else if (value.Is(Keywords.Normal))
            {
                return(new Length(120f, Length.Unit.Percent));
            }

            var val = value.ToSingle();

            if (val.HasValue)
            {
                return(new Length(val.Value * 100f, Length.Unit.Percent));
            }

            return(null);
        }
コード例 #29
0
        public Boolean TryConvert(ICssValue value, Action <Tuple <T[], U> > setResult)
        {
            var values = value as CssValueList;
            var end    = default(ICssValue);

            if (values != null)
            {
                var items = values.ToList();
                end = items[items.Count - 1].Reduce();
                items.RemoveAt(items.Count - 1);
                values = items.ToSeparatedList();
            }
            else
            {
                values = new CssValueList();
                end    = value;
            }

            T[] v1 = default(T[]);
            U   v2 = default(U);

            if (!_endConverter.TryConvert(end, m => v2 = m))
            {
                return(false);
            }

            if (values.Length != 0 && !_listConverter.TryConvert(values, m => v1 = m))
            {
                return(false);
            }
            else if (values.Length == 0)
            {
                v1 = new T[0];
            }

            setResult(Tuple.Create(v1, v2));
            return(true);
        }
コード例 #30
0
        public static GradientStop?ToGradientStop(ICssValue value, Length?location)
        {
            var values = value as CssValueList;
            var color  = Color.Transparent;

            if (values != null)
            {
                if (values.Length != 2)
                {
                    return(null);
                }

                location = values[1].ToDistance();
                value    = values[0];
            }

            if (!Converters.ColorConverter.TryConvert(value, m => color = m) || location == null)
            {
                return(null);
            }

            return(new GradientStop(color, location.Value));
        }