Пример #1
0
        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);
 }
Пример #3
0
        /// <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);
        }
Пример #4
0
 public void Visit(DothtmlNameNode name)
 {
     LastFoundNode = name;
 }