private void JumpToEnd(ref Token current) { while (current.IsNot(TokenType.EndOfFile, TokenType.Semicolon)) { current = NextToken(); } }
private ISelector CreateSelector(ref Token token) { var selector = _parser.GetSelectorCreator(); var start = token.Position; while (token.IsNot(TokenType.EndOfFile, TokenType.CurlyBracketOpen, TokenType.CurlyBracketClose)) { selector.Apply(token); token = NextToken(); } var selectorIsValid = selector.IsValid; var result = selector.ToPool(); var node = result as StylesheetNode; if (node != null) { var end = token.Position.Shift(-1); node.StylesheetText = CreateView(start, end); } if (!selectorIsValid && !_parser.Options.AllowInvalidValues) { RaiseErrorOccurred(ParseError.InvalidSelector, start); result = null; } return(result); }
private TokenValue CreateValue(TokenType closing, ref Token token, out bool important) { var value = Pool.NewValueBuilder(); _lexer.IsInValue = true; token = NextToken(); var start = token.Position; while (token.IsNot(TokenType.EndOfFile, TokenType.Semicolon, closing)) { value.Apply(token); token = NextToken(); } important = value.IsImportant; _lexer.IsInValue = false; var valueIsValid = value.IsValid; var result = value.ToPool(); //var node = result as StylesheetNode; var node = (StylesheetNode) result; if (node != null) { var end = token.Position.Shift(-1); node.StylesheetText = CreateView(start, end); } if (!valueIsValid && !_parser.Options.AllowInvalidValues) { RaiseErrorOccurred(ParseError.InvalidValue, start); result = null; } return result; }
private MediaFeature CreateFeature(ref Token token) { if (token.Type == TokenType.Ident) { var start = token.Position; var val = TokenValue.Empty; var feature = _parser.Options.AllowInvalidConstraints ? new UnknownMediaFeature(token.Data) : MediaFeatureFactory.Instance.Create(token.Data); token = NextToken(); if (token.Type == TokenType.Colon) { var value = Pool.NewValueBuilder(); token = NextToken(); while (token.IsNot(TokenType.RoundBracketClose, TokenType.EndOfFile) || !value.IsReady) { value.Apply(token); token = NextToken(); } val = value.ToPool(); } else if (token.Type == TokenType.EndOfFile) { return(null); } if ((feature != null) && feature.TrySetValue(val)) { var node = feature as StylesheetNode; if (node != null) { var end = token.Position.Shift(-1); node.StylesheetText = CreateView(start, end); } return(feature); } } else { JumpToArgEnd(ref token); } return(null); }
public List<Medium> CreateMedia(ref Token token) { var list = new List<Medium>(); ParseComments(ref token); while (token.Type != TokenType.EndOfFile) { var medium = CreateMedium(ref token); if ((medium == null) || token.IsNot(TokenType.Comma, TokenType.EndOfFile)) { throw new ParseException("Unable to create medium or end of file reached unexpectedly"); } token = NextToken(); ParseComments(ref token); list.Add(medium); } return list; }