public static string GetValue(this IRazorDirective directive, RazorDirectiveTokenType type, int skip) { for (var i = 0; i < directive.Tokens.Count; i++) { var token = directive.Tokens[i]; if (token.Descriptor.Type == type) { if (skip-- == 0) { return(token.Value); } } } return(null); }
public static string GetValue(this IRazorDirective directive, RazorDirectiveTokenType type) { return(GetValue(directive, type, skip: 0)); }
private void Render(IRazorDirective source, CSharpRenderingContext context) { const string TypeHelper = "__typeHelper"; for (var i = 0; i < source.Tokens.Count; i++) { var token = source.Tokens[i]; var tokenType = token.Descriptor.Type; if (token.DocumentLocation == null || (tokenType != RazorDirectiveTokenType.Type && tokenType != RazorDirectiveTokenType.Member && tokenType != RazorDirectiveTokenType.String)) { continue; } // Wrap the directive token in a lambda to isolate variable names. context.Writer.WriteStartAssignment(ActionHelper); using (context.Writer.BuildLambda(endLine: true)) { switch (tokenType) { case RazorDirectiveTokenType.Type: using (context.Writer.BuildCodeMapping(token.DocumentLocation)) { context.Writer.Write(token.Value); } context.Writer .Write(" ") .WriteStartAssignment(TypeHelper) .WriteLine("null;"); break; case RazorDirectiveTokenType.Member: context.Writer .Write(typeof(object).FullName) .Write(" "); using (context.Writer.BuildCodeMapping(token.DocumentLocation)) { context.Writer.Write(token.Value); } context.Writer.WriteLine(" = null;"); break; case RazorDirectiveTokenType.String: context.Writer .Write(typeof(object).FullName) .Write(" ") .WriteStartAssignment(TypeHelper); if (token.Value.StartsWith("\"", StringComparison.Ordinal)) { using (context.Writer.BuildCodeMapping(token.DocumentLocation)) { context.Writer.Write(token.Value); } } else { context.Writer.Write("\""); using (context.Writer.BuildCodeMapping(token.DocumentLocation)) { context.Writer.Write(token.Value); } context.Writer.Write("\""); } context.Writer.WriteLine(";"); break; } } } }