Пример #1
0
        internal void AppendDeclarations(StyleDeclaration style, string declarations)
        {
            var tokenizer = CreateTokenizer(declarations);
            var builder   = new StylesheetComposer(tokenizer, this);

            builder.FillDeclarations(style);
        }
Пример #2
0
        internal async Task <Stylesheet> ParseAsync(Stylesheet sheet, TextSource source)
        {
            await source.PrefetchAllAsync(CancellationToken.None).ConfigureAwait(false);

            var tokenizer = new Lexer(source);
            var start     = tokenizer.GetCurrentPosition();
            var builder   = new StylesheetComposer(tokenizer, this);
            var tasks     = new List <Task>();
            var end       = builder.CreateRules(sheet);
            var range     = new TextRange(start, end);

            sheet.StylesheetText = new StylesheetText(range, source);

            foreach (var rule in sheet.Rules)
            {
                if (rule.Type == RuleType.Charset)
                {
                    continue;
                }
                if (rule.Type != RuleType.Import)
                {
                    break;
                }
            }

            await TaskEx.WhenAll(tasks).ConfigureAwait(false);

            return(sheet);
        }
Пример #3
0
        private T Parse <T>(string source, Func <StylesheetComposer, Token, Tuple <T, Token> > create)
        {
            var tokenizer = CreateTokenizer(source);
            var token     = tokenizer.Get();
            var builder   = new StylesheetComposer(tokenizer, this);
            var pair      = create(builder, token);

            return(pair.Item2.Type == TokenType.EndOfFile ? pair.Item1 : default(T));
        }
Пример #4
0
        private T Parse <T>(string source, Func <StylesheetComposer, Token, T> create)
        {
            var tokenizer = CreateTokenizer(source);
            var token     = tokenizer.Get();
            var builder   = new StylesheetComposer(tokenizer, this);
            var rule      = create(builder, token);

            return(tokenizer.Get().Type == TokenType.EndOfFile ? rule : default(T));
        }
Пример #5
0
        internal TokenValue ParseValue(string valueText)
        {
            var tokenizer = CreateTokenizer(valueText);
            var token     = default(Token);
            var builder   = new StylesheetComposer(tokenizer, this);
            var value     = builder.CreateValue(ref token);

            return(token.Type == TokenType.EndOfFile ? value : null);
        }
Пример #6
0
        internal Stylesheet Parse(TextSource source)
        {
            var sheet     = new Stylesheet(this);
            var tokenizer = new Lexer(source);
            var start     = tokenizer.GetCurrentPosition();
            var builder   = new StylesheetComposer(tokenizer, this);
            var end       = builder.CreateRules(sheet);
            var range     = new TextRange(start, end);

            sheet.StylesheetText = new StylesheetText(range, source);
            return(sheet);
        }