public static new JSONString Parse(Token token) { StringBuilder builder = new StringBuilder(); token.MoveToContent(); if (!token.Peeks("\"")) { return null; } token.MovePast("\""); while (!token.Peeks("\"")) { if (token.Peeks("\\\"")) { builder.Append("\""); token.Skip(2); } else { builder.Append(token.Current); token.Skip(1); } } token.MovePast("\""); return new JSONString(builder.ToString()); }
public CssRule(Token token) { _selectorStacks = new List<CssSelectorStack>(); _statements = new List<CssStatement>(); string data = token.ReadUntil('{'); token.MovePast("{"); foreach (var stack in data.Split(',').Select(CssSelectorStack.Parse).Where(stack => stack != null)) _selectorStacks.Add(stack); var statements = token.ReadUntil('}').Split(';').Select(s => s.Trim()).Where(s => !string.IsNullOrEmpty(s)).ToArray(); foreach (string statement in statements) { _statements.Add(new CssStatement(statement)); } token.MovePast("}"); }
public HtmlTag(Token token) { token.Next(); Name = token.ReadUntil(' ', '/', '>'); ReadAttributes(token); Attributes.Changed += OnAttributesChanged; _styles = new HtmlStyleCollection(); _styles.Changed += OnStylesChanged; UpdateStyles(); token.MoveToContent(); Closed = token.Peeks('/'); token.MovePast(">"); }
protected void ReadAttributes(Token token) { var done = false; while (!done) { token.MoveToContent(); if (token.Peeks("/>") || token.Peeks(">") || token.IsDone) done = true; else { string attributeName = token.ReadUntil(' ', '='); token.MovePast("="); token.MoveToContent(); string attributeValue; if (token.Current == '\'' || token.Current == '"') { char delimiter = token.Current; token.Next(); attributeValue = token.ReadUntil(delimiter); token.Next(); } else attributeValue = token.ReadUntil(' ', '/', '>'); _attributes[attributeName] = attributeValue; } } }
public HtmlEndTag(Token token) { token.MovePast("</"); TagName = token.ReadUntil(">").ToLower(); token.MovePast(">"); }