public override void GenerateEndBlockCode(Block target, CodeGeneratorContext context) { string endBlock = context.BuildCodeString(cw => { if (context.ExpressionRenderingMode == ExpressionRenderingMode.WriteToOutput) { if (!context.Host.DesignTimeMode) { cw.WriteEndMethodInvoke(); } cw.WriteEndStatement(); } else { cw.WriteLineContinuation(); } }); context.MarkEndOfGeneratedCode(); context.BufferStatementFragment(endBlock); context.FlushBufferedStatement(); if (context.Host.EnableInstrumentation && context.ExpressionRenderingMode == ExpressionRenderingMode.WriteToOutput) { Span contentSpan = target.Children .OfType<Span>() .Where(s => s.Kind == SpanKind.Code || s.Kind == SpanKind.Markup) .FirstOrDefault(); if (contentSpan != null) { context.AddContextCall(contentSpan, context.Host.GeneratedClassContext.EndContextMethodName, false); } } }
public override void GenerateCode(Span target, CodeGeneratorContext context) { if (!context.Host.DesignTimeMode && String.IsNullOrEmpty(target.Content)) { return; } if (context.Host.EnableInstrumentation) { context.AddContextCall(target, context.Host.GeneratedClassContext.BeginContextMethodName, isLiteral: true); } if (!String.IsNullOrEmpty(target.Content) && !context.Host.DesignTimeMode) { string code = context.BuildCodeString(cw => { if (!String.IsNullOrEmpty(context.TargetWriterName)) { cw.WriteStartMethodInvoke(context.Host.GeneratedClassContext.WriteLiteralToMethodName); cw.WriteSnippet(context.TargetWriterName); cw.WriteParameterSeparator(); } else { cw.WriteStartMethodInvoke(context.Host.GeneratedClassContext.WriteLiteralMethodName); } cw.WriteStringLiteral(target.Content); cw.WriteEndMethodInvoke(); cw.WriteEndStatement(); }); context.AddStatement(code); } if (context.Host.EnableInstrumentation) { context.AddContextCall(target, context.Host.GeneratedClassContext.EndContextMethodName, isLiteral: true); } }
public override void GenerateStartBlockCode(Block target, CodeGeneratorContext context) { if (context.Host.EnableInstrumentation && context.ExpressionRenderingMode == ExpressionRenderingMode.WriteToOutput) { Span contentSpan = target.Children .OfType<Span>() .Where(s => s.Kind == SpanKind.Code || s.Kind == SpanKind.Markup) .FirstOrDefault(); if (contentSpan != null) { context.AddContextCall(contentSpan, context.Host.GeneratedClassContext.BeginContextMethodName, false); } } string writeInvocation = context.BuildCodeString(cw => { if (context.Host.DesignTimeMode) { context.EnsureExpressionHelperVariable(); cw.WriteStartAssignment("__o"); } else if (context.ExpressionRenderingMode == ExpressionRenderingMode.WriteToOutput) { if (!String.IsNullOrEmpty(context.TargetWriterName)) { cw.WriteStartMethodInvoke(context.Host.GeneratedClassContext.WriteToMethodName); cw.WriteSnippet(context.TargetWriterName); cw.WriteParameterSeparator(); } else { cw.WriteStartMethodInvoke(context.Host.GeneratedClassContext.WriteMethodName); } } }); context.BufferStatementFragment(writeInvocation); context.MarkStartOfGeneratedCode(); }
public override void GenerateCode(Span target, CodeGeneratorContext context) { // Check if the host supports it if (String.IsNullOrEmpty(context.Host.GeneratedClassContext.ResolveUrlMethodName)) { // Nope, just use the default MarkupCodeGenerator behavior new MarkupCodeGenerator().GenerateCode(target, context); return; } if (!context.Host.DesignTimeMode && String.IsNullOrEmpty(target.Content)) { return; } if (context.Host.EnableInstrumentation && context.ExpressionRenderingMode == ExpressionRenderingMode.WriteToOutput) { // Add a non-literal context call (non-literal because the expanded URL will not match the source character-by-character) context.AddContextCall(target, context.Host.GeneratedClassContext.BeginContextMethodName, isLiteral: false); } if (!String.IsNullOrEmpty(target.Content) && !context.Host.DesignTimeMode) { string code = context.BuildCodeString(cw => { if (context.ExpressionRenderingMode == ExpressionRenderingMode.WriteToOutput) { if (!String.IsNullOrEmpty(context.TargetWriterName)) { cw.WriteStartMethodInvoke(context.Host.GeneratedClassContext.WriteLiteralToMethodName); cw.WriteSnippet(context.TargetWriterName); cw.WriteParameterSeparator(); } else { cw.WriteStartMethodInvoke(context.Host.GeneratedClassContext.WriteLiteralMethodName); } } cw.WriteStartMethodInvoke(context.Host.GeneratedClassContext.ResolveUrlMethodName); cw.WriteStringLiteral(target.Content); cw.WriteEndMethodInvoke(); if (context.ExpressionRenderingMode == ExpressionRenderingMode.WriteToOutput) { cw.WriteEndMethodInvoke(); cw.WriteEndStatement(); } else { cw.WriteLineContinuation(); } }); if (context.ExpressionRenderingMode == ExpressionRenderingMode.WriteToOutput) { context.AddStatement(code); } else { context.BufferStatementFragment(code); } } if (context.Host.EnableInstrumentation && context.ExpressionRenderingMode == ExpressionRenderingMode.WriteToOutput) { context.AddContextCall(target, context.Host.GeneratedClassContext.EndContextMethodName, isLiteral: false); } }