Ejemplo n.º 1
0
        /// <summary>
        /// Creates a new keyframe-rule from the given source.
        /// </summary>
        /// <param name="source">The token iterator.</param>
        /// <returns>The keyframe-rule.</returns>
        CSSKeyframeRule CreateKeyframeRule(IEnumerator <CssToken> source)
        {
            var keyframe = new CSSKeyframeRule();

            keyframe.ParentStyleSheet = sheet;
            keyframe.ParentRule       = CurrentRule;
            open.Push(keyframe);

            do
            {
                if (source.Current.Type == CssTokenType.CurlyBracketOpen)
                {
                    if (SkipToNextNonWhitespace(source))
                    {
                        var tokens = LimitToCurrentBlock(source);
                        AppendDeclarations(tokens.GetEnumerator(), keyframe.Style.List);
                    }

                    break;
                }

                buffer.Append(source.Current.ToString());
            }while (source.MoveNext());

            keyframe.KeyText = buffer.ToString();
            buffer.Clear();
            open.Pop();
            return(keyframe);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Takes a string and transforms it into a CSS keyframe rule.
        /// </summary>
        /// <param name="rule">The string to parse.</param>
        /// <param name="quirksMode">Optional: The status of the quirks mode flag (usually not set).</param>
        /// <returns>The CSSKeyframeRule object.</returns>
        internal static CSSKeyframeRule ParseKeyframeRule(String rule, Boolean quirksMode = false)
        {
            var parser   = new CssParser(rule);
            var keyframe = new CSSKeyframeRule();

            parser.AddRule(keyframe);
            parser.IsQuirksMode   = quirksMode;
            parser.skipExceptions = false;
            parser.state          = CssState.InKeyframeText;
            parser.Parse();
            return(keyframe);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Called in the text for a frame in the @keyframes rule.
        /// </summary>
        /// <param name="token">The current token.</param>
        /// <returns>The status.</returns>
        Boolean InKeyframeText(CssToken token)
        {
            if (token.Type == CssTokenType.CurlyBracketOpen)
            {
                var frame = new CSSKeyframeRule();
                frame.KeyText = buffer.ToPool();
                AddRule(frame);
                SwitchTo(CssState.InDeclaration);
                return(true);
            }
            else if (token.Type == CssTokenType.CurlyBracketClose)
            {
                buffer.ToPool();
                KeyframesData(token);
                return(false);
            }

            buffer.Append(token.ToValue());
            return(true);
        }