internal void AppendDeclarations(StyleDeclaration style, string declarations) { var tokenizer = CreateTokenizer(declarations); var builder = new StylesheetComposer(tokenizer, this); builder.FillDeclarations(style); }
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); }
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);
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); }
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)); }
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); }