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 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 GenerateStartBlockCode (Block target, CodeGeneratorContext context) { if (context.Host.DesignTimeMode) return; Block child = target.Children.Where (n => n.IsBlock).Cast<Block> ().FirstOrDefault (); isExpression = child != null && child.Type == BlockType.Expression; var sb = new StringBuilder (); sb.Append (", Tuple.Create<string,object,bool> ("); sb.WriteCStyleStringLiteral (Prefix.Value); sb.Append (", "); if (isExpression) { oldRenderingMode = context.GetExpressionRenderingMode (); context.SetExpressionRenderingMode (ExpressionRenderingMode.InjectCode); } else { sb.AppendFormat ( "new {0} ({1} => {{", context.Host.GeneratedClassContext.TemplateTypeName, ValueWriterName); } context.MarkEndOfGeneratedCode (); context.BufferStatementFragment (sb.ToString ()); oldTargetWriter = context.TargetWriterName; context.TargetWriterName = ValueWriterName; }
public override void GenerateCode(Span target, CodeGeneratorContext context) { // We parsed: "@contentType Text.Html" // And we assigned this code generator to the "Text.Html" part // So this node's content should be "Text.Html" string contentType = target.Content; // The final code we want is something like // Response.ContentType = ContentTypes.Text.Html; // So, we start by injecting the "prolog" (this is compiler speak for the stuff before the user code) context.BufferStatementFragment("Response.ContentType = ContentTypes."); // Now we tell the code generator infrastructure that we're at the start of user code // This allows us to inject markers so the editor can light up. context.MarkStartOfGeneratedCode(); // Here's our user code! context.BufferStatementFragment(contentType); // And we tell Razor we're finished with user code, again for the editor context.MarkEndOfGeneratedCode(); // Finally, we inject the "epilog" (compiler speak for stuff after the user code) context.BufferStatementFragment(";"); // And output the whole statement to the generated Execute method context.FlushBufferedStatement(); }
public override void GenerateStartBlockCode(Block target, CodeGeneratorContext context) { // Flush the buffered statement since we're interrupting it with a comment. if (!String.IsNullOrEmpty(context.CurrentBufferedStatement)) { context.MarkEndOfGeneratedCode(); context.BufferStatementFragment(context.BuildCodeString(cw => cw.WriteLineContinuation())); } context.FlushBufferedStatement(); }
public override void GenerateStartBlockCode(Block target, CodeGeneratorContext context) { if (context.Host.DesignTimeMode) { return; // Don't generate anything! } // What kind of block is nested within string generatedCode; Block child = target.Children.Where(n => n.IsBlock).Cast <Block>().FirstOrDefault(); if (child != null && child.Type == BlockType.Expression) { _isExpression = true; generatedCode = context.BuildCodeString( cw => { cw.WriteParameterSeparator(); cw.WriteStartMethodInvoke("Tuple.Create"); cw.WriteLocationTaggedString(Prefix); cw.WriteParameterSeparator(); cw.WriteStartMethodInvoke("Tuple.Create", "System.Object", "System.Int32"); } ); _oldRenderingMode = context.ExpressionRenderingMode; context.ExpressionRenderingMode = ExpressionRenderingMode.InjectCode; } else { generatedCode = context.BuildCodeString( cw => { cw.WriteParameterSeparator(); cw.WriteStartMethodInvoke("Tuple.Create"); cw.WriteLocationTaggedString(Prefix); cw.WriteParameterSeparator(); cw.WriteStartMethodInvoke("Tuple.Create", "System.Object", "System.Int32"); cw.WriteStartConstructor( context.Host.GeneratedClassContext.TemplateTypeName ); cw.WriteStartLambdaDelegate(ValueWriterName); } ); } context.MarkEndOfGeneratedCode(); context.BufferStatementFragment(generatedCode); _oldTargetWriter = context.TargetWriterName; context.TargetWriterName = ValueWriterName; }
public override void GenerateStartBlockCode(Block target, CodeGeneratorContext context) { string generatedCode = context.BuildCodeString(cw => { cw.WriteStartLambdaExpression(ItemParameterName); cw.WriteStartConstructor(context.Host.GeneratedClassContext.TemplateTypeName); cw.WriteStartLambdaDelegate(TemplateWriterName); }); context.MarkEndOfGeneratedCode(); context.BufferStatementFragment(generatedCode); context.FlushBufferedStatement(); _oldTargetWriter = context.TargetWriterName; context.TargetWriterName = TemplateWriterName; }
public override void GenerateStartBlockCode(Block target, CodeGeneratorContext context) { string generatedCode = context.BuildCodeString(cw => { cw.WriteStartLambdaExpression(ItemParameterName); cw.WriteStartConstructor(context.Host.GeneratedClassContext.TemplateTypeName); cw.WriteStartLambdaDelegate(TemplateWriterName); }); context.MarkEndOfGeneratedCode(); context.BufferStatementFragment(generatedCode); context.FlushBufferedStatement(); _oldTargetWriter = context.TargetWriterName; context.TargetWriterName = TemplateWriterName; }
public override void GenerateStartBlockCode(Block target, CodeGeneratorContext context) { if (context.Host.DesignTimeMode) { return; // Don't generate anything! } // What kind of block is nested within string generatedCode; Block child = target.Children.Where(n => n.IsBlock).Cast<Block>().FirstOrDefault(); if (child != null && child.Type == BlockType.Expression) { _isExpression = true; generatedCode = context.BuildCodeString(cw => { cw.WriteParameterSeparator(); cw.WriteStartMethodInvoke("Tuple.Create"); cw.WriteLocationTaggedString(Prefix); cw.WriteParameterSeparator(); cw.WriteStartMethodInvoke("Tuple.Create", "System.Object", "System.Int32"); }); _oldRenderingMode = context.ExpressionRenderingMode; context.ExpressionRenderingMode = ExpressionRenderingMode.InjectCode; } else { generatedCode = context.BuildCodeString(cw => { cw.WriteParameterSeparator(); cw.WriteStartMethodInvoke("Tuple.Create"); cw.WriteLocationTaggedString(Prefix); cw.WriteParameterSeparator(); cw.WriteStartMethodInvoke("Tuple.Create", "System.Object", "System.Int32"); cw.WriteStartConstructor(context.Host.GeneratedClassContext.TemplateTypeName); cw.WriteStartLambdaDelegate(ValueWriterName); }); } context.MarkEndOfGeneratedCode(); context.BufferStatementFragment(generatedCode); _oldTargetWriter = context.TargetWriterName; context.TargetWriterName = ValueWriterName; }
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(); }