示例#1
0
 public void Reset()
 {
     _symbols      = new List <ISymbol>();
     EditHandler   = SpanEditHandler.CreateDefault(s => Enumerable.Empty <ISymbol>());
     CodeGenerator = SpanCodeGenerator.Null;
     Start         = SourceLocation.Zero;
 }
示例#2
0
 public void Reset()
 {
     _symbols = new List<ISymbol>();
     EditHandler = SpanEditHandler.CreateDefault(s => Enumerable.Empty<ISymbol>());
     CodeGenerator = SpanCodeGenerator.Null;
     Start = SourceLocation.Zero;
 }
示例#3
0
 public SpanConstructor With(ISpanCodeGenerator generator)
 {
     Builder.CodeGenerator = generator;
     return this;
 }
示例#4
0
 public SpanConstructor With(ISpanCodeGenerator generator)
 {
     Builder.CodeGenerator = generator;
     return(this);
 }
示例#5
0
 public SpanConstructor As(ISpanCodeGenerator codeGenerator)
 {
     return(_self.With(codeGenerator));
 }
 public SpanConstructor As(ISpanCodeGenerator codeGenerator)
 {
     return _self.With(codeGenerator);
 }
        private static Block RebuildCodeGenerators(Block block)
        {
            var builder = new BlockBuilder(block);

            var isDynamic = builder.CodeGenerator is DynamicAttributeBlockCodeGenerator;

            // We don't want any attribute specific logic here, null out the block code generator.
            if (isDynamic || builder.CodeGenerator is AttributeBlockCodeGenerator)
            {
                builder.CodeGenerator = BlockCodeGenerator.Null;
            }

            for (var i = 0; i < builder.Children.Count; i++)
            {
                var child = builder.Children[i];

                if (child.IsBlock)
                {
                    // The child is a block, recurse down into the block to rebuild its children
                    builder.Children[i] = RebuildCodeGenerators((Block)child);
                }
                else
                {
                    var childSpan = (Span)child;
                    ISpanCodeGenerator newCodeGenerator = null;
                    var literalGenerator = childSpan.CodeGenerator as LiteralAttributeCodeGenerator;

                    if (literalGenerator != null)
                    {
                        if (literalGenerator.ValueGenerator == null || literalGenerator.ValueGenerator.Value == null)
                        {
                            newCodeGenerator = new MarkupCodeGenerator();
                        }
                        else
                        {
                            newCodeGenerator = literalGenerator.ValueGenerator.Value;
                        }
                    }
                    else if (isDynamic && childSpan.CodeGenerator == SpanCodeGenerator.Null)
                    {
                        // Usually the dynamic code generator handles rendering the null code generators underneath
                        // it. This doesn't make sense in terms of tag helpers though, we need to change null code
                        // generators to markup code generators.

                        newCodeGenerator = new MarkupCodeGenerator();
                    }

                    // If we have a new code generator we'll need to re-build the child
                    if (newCodeGenerator != null)
                    {
                        var childSpanBuilder = new SpanBuilder(childSpan)
                        {
                            CodeGenerator = newCodeGenerator
                        };

                        builder.Children[i] = childSpanBuilder.Build();
                    }
                }
            }

            return(builder.Build());
        }