Example #1
0
        /// <summary>
        /// Scans the current medium for the @media or @import rule.
        /// </summary>
        public CssMedium CreateMedium(ref CssToken token)
        {
            var medium = new CssMedium();
            CollectTrivia(ref token);

            if (token.Type == CssTokenType.Ident)
            {
                var identifier = token.Data;

                if (identifier.Isi(Keywords.Not))
                {
                    medium.IsInverse = true;
                    token = NextToken();
                    CollectTrivia(ref token);
                }
                else if (identifier.Isi(Keywords.Only))
                {
                    medium.IsExclusive = true;
                    token = NextToken();
                    CollectTrivia(ref token);
                }
            }

            if (token.Type == CssTokenType.Ident)
            {
                medium.Type = token.Data;
                token = NextToken();
                CollectTrivia(ref token);

                if (token.Type != CssTokenType.Ident || !token.Data.Isi(Keywords.And))
                {
                    return medium;
                }

                token = NextToken();
                CollectTrivia(ref token);
            }

            do
            {
                if (token.Type != CssTokenType.RoundBracketOpen)
                {
                    return null;
                }

                token = NextToken();
                CollectTrivia(ref token);
                var feature = CreateFeature(ref token);

                if (feature != null)
                {
                    medium.AppendChild(feature);
                }

                if (token.Type != CssTokenType.RoundBracketClose)
                {
                    return null;
                }

                token = NextToken();
                CollectTrivia(ref token);

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

                if (token.Type != CssTokenType.Ident || !token.Data.Isi(Keywords.And))
                {
                    break;
                }

                token = NextToken();
                CollectTrivia(ref token);
            }
            while (token.Type != CssTokenType.EndOfFile);

            return medium;
        }