Esempio n. 1
0
        public override void Visit(AttributeNode node)
        {
            WriteText(node.Name);
            WriteText("='");

            base.Visit(node);

            WriteText("'");
        }
Esempio n. 2
0
        public override AstNode Process(ParserReader parser)
        {
            var reader = parser.Input;
            var attributeParser = new AttributeParser(parser);
            var baseIndent = parser.Indent;

            if(!reader.Read())
                return null;

            var node = ReadTagNode(reader);

            while(!reader.IsEndOfStream)
                switch(reader.CurrentChar)
                {
                    case '/':
                    {
                        reader.Skip("/");
                        node.AutoClose = true;
                        break;
                    }
                    case '#':
                    {
                        reader.Skip("#");

                        //Todo: should be a port of output
                        var attribute = node.Attributes.Find(a => a.Name.Equals("id", StringComparison.InvariantCultureIgnoreCase));

                        if(attribute == null)
                        {
                            attribute = new AttributeNode("id");
                            node.Attributes.Add(attribute);
                        }

                        attribute.Value = parser.ParseText(reader.ReadNameEscaped(), reader.Index);

                        continue;
                    }
                    case '.':
                    {
                        reader.Skip(".");

                        node.Attributes.Add(new AttributeNode("class")
                        {
                            Value = parser.ParseText(reader.ReadNameEscaped(), reader.Index)
                        });

                        continue;
                    }
                    case '&':
                        reader.CurrentLine.EscapeLine = true;
                        reader.Skip("&");
                        break;
                    case '!':
                        reader.CurrentLine.EscapeLine = false;
                        reader.Skip("!");
                        break;
                    case '=':
                    {
                        reader.Skip("=");

                        reader.SkipWhiteSpaces();

                        node.Child = new CodeNode(reader.ReadToEndMultiLine(), reader.CurrentLine.EscapeLine);

                        break;
                    }
                    case '(':
                    {
                        node.Attributes.AddRange(attributeParser.ParseHtmlStyle());
                        break;
                    }
                    case '{':
                    {
                        node.Attributes.AddRange(attributeParser.ParseRubyStyle());
                        break;
                    }
                    default:
                    {
                        var index = reader.Index;
                        var text = reader.ReadToEndMultiLine();
                        node.Child = parser.ParseText(text.TrimStart(), index);

                        break;
                    }
                }

            if (reader.NextLine != null && reader.NextLine.Indent > reader.CurrentLine.Indent)
            {
                node.Child = parser.ParseChildren(baseIndent, node.Child);
            }

            node.EndInfo = reader.SourceInfo;

            return node;
        }
Esempio n. 3
0
 public virtual void Visit(AttributeNode node)
 {
     if(node.Value != null)
         Visit(node.Value);
 }