예제 #1
0
            private static ICssValue GetItem(CssTupleValue tuple, Int32 index)
            {
                if (tuple.Items.Length > index)
                {
                    return(tuple.Items[index]);
                }

                return(GetItemSimple(tuple, index / 2));
            }
예제 #2
0
            private static ICssValue GetItemSimple(CssTupleValue tuple, Int32 index)
            {
                if (tuple.Items.Length > index)
                {
                    var nested = tuple.Items[index] as CssTupleValue;

                    if (nested != null && nested.Items.Length == 3 && nested.Items[0] == null && nested.Items[1] == null)
                    {
                        return(nested.Items[2]);
                    }
                }

                return(new Constant <Object>(CssKeywords.Auto, null));
            }
예제 #3
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));
            }
예제 #4
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));
            }
예제 #5
0
        public static ICssValue ParseGridTemplate(this StringSource source)
        {
            var pos = source.Index;

            if (source.IsIdentifier(CssKeywords.None))
            {
                return(new Identifier(CssKeywords.None));
            }

            var rows = source.ParseTrackList() ?? source.ParseAutoTrackList();

            if (rows != null)
            {
                var c = source.SkipSpacesAndComments();

                if (c == Symbols.Solidus)
                {
                    source.SkipCurrentAndSpaces();
                    var cols = source.ParseTrackList() ?? source.ParseAutoTrackList();

                    if (cols != null)
                    {
                        source.SkipSpacesAndComments();
                        return(new GridTemplate(rows, cols, null));
                    }
                }
            }
            else
            {
                var rowValues  = new List <ICssValue>();
                var col        = default(ICssValue);
                var areaValues = new List <ICssValue>();
                var hasValue   = false;

                while (!source.IsDone)
                {
                    var value = source.ParseGridTemplateAlternative();

                    if (value == null)
                    {
                        break;
                    }

                    hasValue = true;
                    source.SkipSpacesAndComments();
                    rowValues.Add(new CssTupleValue(new[] { value.Item1, value.Item3, value.Item4 }));
                    areaValues.Add(new StringValue(value.Item2));
                }

                if (hasValue)
                {
                    if (source.Current == Symbols.Solidus)
                    {
                        source.SkipCurrentAndSpaces();
                        col = source.ParseExplicitTrackList();

                        if (col == null)
                        {
                            source.BackTo(pos);
                            return(null);
                        }
                    }

                    var row  = new CssTupleValue(rowValues.ToArray());
                    var area = new CssTupleValue(areaValues.ToArray());
                    return(new GridTemplate(row, col, area));
                }
            }

            source.BackTo(pos);
            return(null);
        }