public static string Parse(string template, List<Type> extensions) { if (string.IsNullOrWhiteSpace(template)) return null; var output = string.Empty; var stream = new Stream(template); var shadowClass = new ShadowClass(); var contexts = new Contexts(shadowClass); shadowClass.Clear(); while (stream.Advance()) { if (ParseCodeBlock(stream, shadowClass)) continue; if (ParseLambda(stream, shadowClass, contexts, ref output)) continue; output += stream.Current; } shadowClass.Parse(); extensions.Clear(); extensions.Add(Compiler.Compile(shadowClass)); extensions.AddRange(FindExtensionClasses(shadowClass)); return output; }