private DothtmlNameNode ReadName(bool whitespacesBefore, bool whiteSpacesAfter, DothtmlTokenType nameTokenType) { var startIndex = CurrentIndex; var node = new DothtmlNameNode() { StartPosition = Peek().StartPosition }; if (whitespacesBefore) { node.WhitespacesBefore = SkipWhiteSpace(); } Assert(nameTokenType); node.NameToken = Read(); if (whiteSpacesAfter) { node.WhitespacesAfter = SkipWhiteSpace(); } node.Tokens.AddRange(GetTokensFrom(startIndex)); return(node); }
public void Visit(DothtmlNameNode name) { ResolveFromParent(name); }
/// <summary> /// Reads the attribute. /// </summary> private DothtmlAttributeNode ReadAttribute() { var startIndex = CurrentIndex; var attribute = new DothtmlAttributeNode() { StartPosition = Peek().StartPosition }; // attribute name DothtmlNameNode nameOrPrefix = ReadName(false, false, DothtmlTokenType.Text); if (Peek().Type == DothtmlTokenType.Colon) { attribute.PrefixSeparatorToken = Read(); attribute.AttributePrefixNode = nameOrPrefix; attribute.AttributeNameNode = ReadName(false, false, DothtmlTokenType.Text); } else { attribute.AttributeNameNode = nameOrPrefix; } //spaces before separator belong to name attribute.AttributeNameNode.WhitespacesAfter = SkipWhiteSpace(); if (Peek().Type == DothtmlTokenType.Equals) { attribute.ValueSeparatorToken = Read(); attribute.ValueStartTokens = SkipWhiteSpace(); // attribute value if (Peek().Type == DothtmlTokenType.SingleQuote || Peek().Type == DothtmlTokenType.DoubleQuote) { var quote = Peek().Type; attribute.ValueStartTokens.Add(Read()); var startingWhitespaces = SkipWhiteSpace(); if (Peek().Type == DothtmlTokenType.OpenBinding) { attribute.ValueNode = ReadBindingValue(false, true); } else { attribute.ValueNode = ReadTextValue(false, true, DothtmlTokenType.Text); } //we had to jump forward to decide attribute.ValueNode.WhitespacesBefore = startingWhitespaces; Assert(quote); attribute.ValueEndTokens.Add(Read()); } else { attribute.ValueNode = ReadTextValue(false, false, DothtmlTokenType.Text); //these are not part of any attribute or value SkipWhiteSpace(); } attribute.ValueEndTokens.AddRange(SkipWhiteSpace()); } attribute.Tokens.AddRange(GetTokensFrom(startIndex)); return(attribute); }
public void Visit(DothtmlNameNode name) { LastFoundNode = name; }