// Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; using System.Collections.Generic; namespace Microsoft.AspNetCore.Razor.Evolution { public abstract class RazorEngine { public static RazorEngine Create() { return Create(configure: null); } public static RazorEngine Create(Action configure) { var builder = new DefaultRazorEngineBuilder(); AddDefaults(builder); configure?.Invoke(builder); return builder.Build(); } public static RazorEngine CreateEmpty(Action configure) { var builder = new DefaultRazorEngineBuilder(); configure?.Invoke(builder); return builder.Build(); } internal static void AddDefaults(IRazorEngineBuilder builder) { builder.Phases.Add(new DefaultRazorParsingPhase()); builder.Phases.Add(new DefaultRazorSyntaxTreePhase()); builder.Phases.Add(new DefaultRazorIRLoweringPhase()); builder.Phases.Add(new DefaultRazorIRPhase()); builder.Phases.Add(new DefaultRazorCSharpLoweringPhase()); // Syntax Tree passes builder.Features.Add(new DefaultDirectiveSyntaxTreePass()); builder.Features.Add(new TagHelperBinderSyntaxTreePass()); builder.Features.Add(new HtmlNodeOptimizationPass()); // IR Passes builder.Features.Add(new DefaultDirectiveIRPass()); } public abstract IReadOnlyList Features { get; } public abstract IReadOnlyList Phases { get; } public abstract void Process(RazorCodeDocument document); } }