public CssRule CreateUnknown(CssToken current) { var rule = default(CssUnknownRule); if (_parser.Options.IsIncludingUnknownRules) { var token = NextToken(); rule = new CssUnknownRule(current.Data, _parser); while (token.IsNot(CssTokenType.CurlyBracketOpen, CssTokenType.Semicolon, CssTokenType.Eof)) { rule.Prelude.Add(token); token = NextToken(); } if (token.Type != CssTokenType.Eof) { rule.Content.Add(token); if (token.Type == CssTokenType.CurlyBracketOpen) { var curly = 1; do { token = NextToken(); rule.Content.Add(token); switch (token.Type) { case CssTokenType.CurlyBracketOpen: curly++; break; case CssTokenType.CurlyBracketClose: curly--; break; case CssTokenType.Eof: curly = 0; break; } }while (curly != 0); } } } else { RaiseErrorOccurred(CssParseError.UnknownAtRule, current); SkipRule(current); } return(rule); }
public CssRule CreateUnknown(CssToken current) { var start = current.Position; if (_parser.Options.IsIncludingUnknownRules) { var token = NextToken(); var rule = new CssUnknownRule(current.Data, _parser); _nodes.Push(rule); while (token.IsNot(CssTokenType.CurlyBracketOpen, CssTokenType.Semicolon, CssTokenType.EndOfFile)) { token = NextToken(); } if (token.Type == CssTokenType.CurlyBracketOpen) { var curly = 1; do { token = NextToken(); switch (token.Type) { case CssTokenType.CurlyBracketOpen: curly++; break; case CssTokenType.CurlyBracketClose: curly--; break; case CssTokenType.EndOfFile: curly = 0; break; } }while (curly != 0); } rule.SourceCode = CreateView(start, token.Position); _nodes.Pop(); return(rule); } else { RaiseErrorOccurred(CssParseError.UnknownAtRule, start); JumpToRuleEnd(ref current); return(default(CssUnknownRule)); } }
public CssRule CreateUnknown(CssToken current) { if (_parser.Options.IsIncludingUnknownRules) { var unknown = new CssUnknownRule(current.Data, _parser); _tokenizer.State = CssParseMode.Text; unknown.Prelude = _tokenizer.Get().Data; _tokenizer.State = CssParseMode.Selector; var sb = Pool.NewStringBuilder(); var token = _tokenizer.Get(); sb.Append(token.ToValue()); if (token.Type == CssTokenType.CurlyBracketOpen) { var curly = 1; do { token = _tokenizer.Get(); sb.Append(token.ToValue()); switch (token.Type) { case CssTokenType.CurlyBracketOpen: curly++; break; case CssTokenType.CurlyBracketClose: curly--; break; case CssTokenType.Eof: curly = 0; break; } }while (curly != 0); } unknown.Content = sb.ToPool(); _tokenizer.State = CssParseMode.Data; return(unknown); } else { RaiseErrorOccurred(CssParseError.UnknownAtRule, current); _tokenizer.SkipUnknownRule(); return(null); } }