예제 #1
0
        protected internal virtual GeneratorResults GenerateCodeCore(ITextDocument input, string className, string rootNamespace, string sourceFileName, CancellationToken?cancelToken)
        {
            className     = (className ?? Host.DefaultClassName) ?? DefaultClassName;
            rootNamespace = (rootNamespace ?? Host.DefaultNamespace) ?? DefaultNamespace;

            // Run the parser
            RazorParser parser = CreateParser();

            Debug.Assert(parser != null);
            ParserResults results = parser.Parse(input);

            // Generate code
            RazorCodeGenerator generator = CreateCodeGenerator(className, rootNamespace, sourceFileName);

            generator.DesignTimeMode = Host.DesignTimeMode;
            generator.Visit(results);

            // Post process code
            Host.PostProcessGeneratedCode(generator.Context);

            // Extract design-time mappings
            IDictionary <int, GeneratedCodeMapping> designTimeLineMappings = null;

            if (Host.DesignTimeMode)
            {
                designTimeLineMappings = generator.Context.CodeMappings;
            }

            // Collect results and return
            return(new GeneratorResults(results, generator.Context.CompileUnit, designTimeLineMappings));
        }
        public override RazorCodeGenerator DecorateCodeGenerator(RazorCodeGenerator incomingCodeGenerator)
        {
            var minifier      = MinifierFactory.GetMinifier();
            var codeGenerator = CodeGeneratorFactory.GetCodeGenerator(this, incomingCodeGenerator, minifier);

            return(codeGenerator);
        }
예제 #3
0
 public override RazorCodeGenerator DecorateCodeGenerator(RazorCodeGenerator incomingCodeGenerator)
 {
     return(new MvcCSharpRazorCodeGenerator(incomingCodeGenerator.ClassName,
                                            incomingCodeGenerator.RootNamespaceName,
                                            incomingCodeGenerator.SourceFileName,
                                            incomingCodeGenerator.Host));
 }
예제 #4
0
        public override RazorCodeGenerator DecorateCodeGenerator(RazorCodeGenerator incomingCodeGenerator)
        {
            var codeGenerator = CodeGenerator ?? base.DecorateCodeGenerator(incomingCodeGenerator);

            codeGenerator.GenerateLinePragmas = EnableLinePragmas;
            return(codeGenerator);
        }
예제 #5
0
            public void Must_create_visualbasiccodegenerator()
            {
                var language = new VisualBasicCodeLanguage();
                var host     = MockRepository.GenerateMock <RazorEngineHost>();
                RazorCodeGenerator generator = language.CreateCodeGenerator("ClassName", "RootNamespace", "Template.vbhtml", host);

                Assert.That(generator, Is.InstanceOf <VisualBasicCodeGenerator>());
            }
예제 #6
0
            public void Must_honor_exception_parameter(bool throwExceptionOnParserError)
            {
                var language = new VisualBasicCodeLanguage(throwExceptionOnParserError);
                var host     = MockRepository.GenerateMock <RazorEngineHost>();
                RazorCodeGenerator generator = language.CreateCodeGenerator("ClassName", "RootNamespace", "Template.vbhtml", host);

                Assert.That(((VisualBasicCodeGenerator)generator).ThrowExceptionOnParserError, Is.EqualTo(throwExceptionOnParserError));
            }
 public override RazorCodeGenerator DecorateCodeGenerator(RazorCodeGenerator incomingCodeGenerator)
 {
     if (incomingCodeGenerator is CSharpRazorCodeGenerator)
     {
         return(new SimpleCSharpRazorCodeGenerator(incomingCodeGenerator.ClassName, incomingCodeGenerator.RootNamespaceName, incomingCodeGenerator.SourceFileName, this));
     }
     return(base.DecorateCodeGenerator(incomingCodeGenerator));
 }
예제 #8
0
 /// <summary>
 /// Gets an instance of the code generator and is provided an opportunity to decorate or replace it
 /// </summary>
 /// <param name="incomingCodeGenerator">The code generator</param>
 /// <returns>Either the same code generator, after modifications, or a different code generator</returns>
 public virtual RazorCodeGenerator DecorateCodeGenerator(RazorCodeGenerator incomingCodeGenerator)
 {
     if (incomingCodeGenerator == null)
     {
         throw new ArgumentNullException("incomingCodeGenerator");
     }
     return(incomingCodeGenerator);
 }
 public MinifierCSharpRazorCodeGenerator(RazorEngineHost codeGeneratorHost, RazorCodeGenerator incomingCodeGenerator, IMinifier minifier)
     : base(incomingCodeGenerator.ClassName,
            incomingCodeGenerator.RootNamespaceName,
            incomingCodeGenerator.SourceFileName,
            codeGeneratorHost)
 {
     SetBaseType("dynamic");
     _minifier = minifier;
 }
            public override RazorCodeGenerator DecorateCodeGenerator(RazorCodeGenerator input)
            {
                if (!(input is CSharpRazorCodeGenerator))
                {
                    return(base.DecorateCodeGenerator(input));
                }

                return(new MinifyingCSharpRazorCodeGenerator(input.ClassName, input.RootNamespaceName, input.SourceFileName, input.Host));
            }
예제 #11
0
        /// <summary>
        /// Generates the required code using the specified compile unit.
        /// </summary>
        /// <param name="codeDom">The code DOM provider.</param>
        /// <param name="codeGenerator">The code generator.</param>
        /// <param name="builder">The string builder used to write the code.</param>
        private static void GenerateCode(CodeDomProvider codeDom, RazorCodeGenerator codeGenerator, StringBuilder builder)
        {
            // removed so the output is compatible with standard WebViewPage
            //            var statement = new CodeMethodInvokeExpression(new CodeThisReferenceExpression(), "Clear");
            //            codeGenerator.GeneratedExecuteMethod.Statements.Insert(0, new CodeExpressionStatement(statement));

            using (var writer = new StringWriter(builder))
            {
                codeDom.GenerateCodeFromCompileUnit(codeGenerator.GeneratedCode, writer, new CodeGeneratorOptions());
            }
        }
예제 #12
0
        public void DecorateCodeGeneratorReturnsIncomingCodeGenerator()
        {
            // Arrange
            RazorCodeGenerator expected = new CSharpRazorCodeGenerator("Foo", "Bar", "Baz", CreateHost());

            // Act
            RazorCodeGenerator actual = CreateHost().DecorateCodeGenerator(expected);

            // Assert
            Assert.Same(expected, actual);
        }
예제 #13
0
 public override RazorCodeGenerator DecorateCodeGenerator(RazorCodeGenerator incomingCodeGenerator)
 {
     if (incomingCodeGenerator is RazorEngine.Compilation.CSharp.CSharpRazorCodeGenerator)
     {
         return(new RazorEngine.Compilation.CSharp.CSharpRazorCodeGenerator(incomingCodeGenerator.ClassName,
                                                                            incomingCodeGenerator.RootNamespaceName,
                                                                            incomingCodeGenerator.SourceFileName,
                                                                            incomingCodeGenerator.Host));
     }
     return(base.DecorateCodeGenerator(incomingCodeGenerator));
 }
예제 #14
0
        public override RazorCodeGenerator DecorateCodeGenerator(RazorCodeGenerator incomingCodeGenerator)
        {
            if (incomingCodeGenerator is CSharpRazorCodeGenerator)
            {
                return(new ViewComponentCSharpRazorCodeGenerator(incomingCodeGenerator.ClassName, incomingCodeGenerator.RootNamespaceName, incomingCodeGenerator.SourceFileName, incomingCodeGenerator.Host));
            }
            if (incomingCodeGenerator is VBRazorCodeGenerator)
            {
                return(new VBRazorCodeGenerator(incomingCodeGenerator.ClassName, incomingCodeGenerator.RootNamespaceName, incomingCodeGenerator.SourceFileName, incomingCodeGenerator.Host));
            }

            return(base.DecorateCodeGenerator(incomingCodeGenerator));
        }
예제 #15
0
        /// <summary>
        /// Decorates the code generator.
        /// </summary>
        /// <param name="incomingCodeGenerator">The incoming code generator.</param>
        /// <returns></returns>
        public override RazorCodeGenerator DecorateCodeGenerator(RazorCodeGenerator incomingCodeGenerator)
        {
            if (incomingCodeGenerator is CSharpRazorCodeGenerator)
            {
                return(new CSharp.NancyCSharpRazorCodeGenerator(incomingCodeGenerator.ClassName, incomingCodeGenerator.RootNamespaceName, incomingCodeGenerator.SourceFileName, incomingCodeGenerator.Host));
            }
            if (incomingCodeGenerator is VBRazorCodeGenerator)
            {
                return(new VisualBasic.NancyVisualBasicRazorCodeGenerator(incomingCodeGenerator.ClassName, incomingCodeGenerator.RootNamespaceName, incomingCodeGenerator.SourceFileName, incomingCodeGenerator.Host));
            }

            return(base.DecorateCodeGenerator(incomingCodeGenerator));
        }
예제 #16
0
 public override RazorCodeGenerator DecorateCodeGenerator(RazorCodeGenerator incomingCodeGenerator)
 {
     if (incomingCodeGenerator is CSharpRazorCodeGenerator)
     {
         return(new OpenRastaCSharpRazorCodeGenerator(incomingCodeGenerator.ClassName,
                                                      incomingCodeGenerator.RootNamespaceName,
                                                      incomingCodeGenerator.SourceFileName,
                                                      incomingCodeGenerator.Host));
     }
     if (incomingCodeGenerator is VBRazorCodeGenerator)
     {
         throw new InvalidOperationException("VB not supported yet.");
     }
     return(base.DecorateCodeGenerator(incomingCodeGenerator));
 }
 public override RazorCodeGenerator DecorateCodeGenerator(RazorCodeGenerator incomingCodeGenerator)
 {
     if (!incomingCodeGenerator.Host.DesignTimeMode)
     {
         var generator = new MinifyHtmlCodeGenerator(_minifier);
         if (incomingCodeGenerator is CSharpRazorCodeGenerator)
         {
             return(new MinifyHtmlCSharpCodeGenerator(generator, incomingCodeGenerator.ClassName, incomingCodeGenerator.RootNamespaceName, incomingCodeGenerator.SourceFileName, incomingCodeGenerator.Host));
         }
         if (incomingCodeGenerator is VBRazorCodeGenerator)
         {
             return(new MinifyHtmlVBCodeGenerator(generator, incomingCodeGenerator.ClassName, incomingCodeGenerator.RootNamespaceName, incomingCodeGenerator.SourceFileName, incomingCodeGenerator.Host));
         }
     }
     return(base.DecorateCodeGenerator(incomingCodeGenerator));
 }
예제 #18
0
        public override RazorCodeGenerator DecorateCodeGenerator(RazorCodeGenerator incomingCodeGenerator)
        {
            if (incomingCodeGenerator is CSharpRazorCodeGenerator)
            {
                var minifier = MinifierFactory.GetMinifier();

                return(new HtmlOptimizerMvc4CSharpRazorCodeGenerator(
                           incomingCodeGenerator.ClassName,
                           incomingCodeGenerator.RootNamespaceName,
                           incomingCodeGenerator.SourceFileName,
                           incomingCodeGenerator.Host,
                           minifier));
            }

            return(base.DecorateCodeGenerator(incomingCodeGenerator));
        }
 public override RazorCodeGenerator DecorateCodeGenerator(RazorCodeGenerator incomingCodeGenerator)
 {
     if (incomingCodeGenerator is CSharpRazorCodeGenerator)
     {
         return(new WhiteSpaceBusterMvcCSharpRazorCodeGenerator(
                    incomingCodeGenerator.ClassName,
                    incomingCodeGenerator.RootNamespaceName,
                    incomingCodeGenerator.SourceFileName,
                    incomingCodeGenerator.Host,
                    _optimizer));
     }
     else
     {
         // NB: On ne prend pas en charge les projets VB.NET.
         return(base.DecorateCodeGenerator(incomingCodeGenerator));
     }
 }
예제 #20
0
        public void CreateCodeGeneratorParserListenerReturnsNewCSharpCodeGeneratorParserListener()
        {
            // Arrange
            RazorCodeLanguage service = new VBRazorCodeLanguage();

            // Act
            RazorEngineHost    host      = new RazorEngineHost(new VBRazorCodeLanguage());
            RazorCodeGenerator generator = service.CreateCodeGenerator("Foo", "Bar", "Baz", host);

            // Assert
            Assert.IsNotNull(generator);
            Assert.IsInstanceOfType(generator, typeof(VBRazorCodeGenerator));
            Assert.AreEqual("Foo", generator.ClassName);
            Assert.AreEqual("Bar", generator.RootNamespaceName);
            Assert.AreEqual("Baz", generator.SourceFileName);
            Assert.AreSame(host, generator.Host);
        }
        public void CreateCodeGeneratorParserListenerReturnsNewCSharpCodeGeneratorParserListener()
        {
            // Arrange
            RazorCodeLanguage service = new CSharpRazorCodeLanguage();

            // Act
            RazorEngineHost    host      = new RazorEngineHost(service);
            RazorCodeGenerator generator = service.CreateCodeGenerator("Foo", "Bar", "Baz", host);

            // Assert
            Assert.NotNull(generator);
            Assert.IsType <CSharpRazorCodeGenerator>(generator);
            Assert.Equal("Foo", generator.ClassName);
            Assert.Equal("Bar", generator.RootNamespaceName);
            Assert.Equal("Baz", generator.SourceFileName);
            Assert.Same(host, generator.Host);
        }
        public void CreateCodeGeneratorMethodPassesCodeGeneratorThroughDecorateMethodOnHost()
        {
            // Arrange
            var mockHost = new Mock <RazorEngineHost>(new CSharpRazorCodeLanguage())
            {
                CallBase = true
            };

            RazorCodeGenerator expected = new Mock <RazorCodeGenerator>("Foo", "Bar", "Baz", mockHost.Object).Object;

            mockHost.Setup(h => h.DecorateCodeGenerator(It.IsAny <CSharpRazorCodeGenerator>()))
            .Returns(expected);
            RazorTemplateEngine engine = new RazorTemplateEngine(mockHost.Object);

            // Act
            RazorCodeGenerator actual = engine.CreateCodeGenerator("Foo", "Bar", "Baz");

            // Assert
            Assert.Equal(expected, actual);
        }
예제 #23
0
        protected internal virtual GeneratorResults GenerateCodeCore(ITextDocument input, string className, string rootNamespace, string sourceFileName, CancellationToken?cancelToken)
        {
            className     = (className ?? Host.DefaultClassName) ?? DefaultClassName;
            rootNamespace = (rootNamespace ?? Host.DefaultNamespace) ?? DefaultNamespace;

            // Run the parser
            RazorParser parser = CreateParser();

            Debug.Assert(parser != null);
            ParserResults results = parser.Parse(input);

            // Generate code
            RazorCodeGenerator generator = CreateCodeGenerator(className, rootNamespace, sourceFileName);

            generator.DesignTimeMode = Host.DesignTimeMode;
            generator.Visit(results);

            var builder       = CreateCodeBuilder(generator.Context);
            var builderResult = builder.Build();

            // Collect results and return
            return(new GeneratorResults(results, builderResult));
        }
예제 #24
0
        protected internal virtual GeneratorResults GenerateCodeCore(LookaheadTextReader input, string className, string rootNamespace, string sourceFileName, CancellationToken?cancelToken)
        {
            className     = className ?? Host.DefaultClassName;
            rootNamespace = rootNamespace ?? Host.DefaultNamespace;

            // Set up the code generator
            RazorCodeGenerator generator = CreateCodeGenerator(className, rootNamespace, sourceFileName);

            generator.DesignTimeMode = Host.DesignTimeMode;

            // Setup the consumers
            SyntaxTreeBuilderVisitor treeBuilder = new SyntaxTreeBuilderVisitor()
            {
                CancelToken = cancelToken
            };
            VisitorPair consumer = new VisitorPair(treeBuilder, generator);

            // Run the parser
            RazorParser parser = CreateParser();

            Debug.Assert(parser != null);
            parser.Parse(input, consumer);

            // Post process code
            Host.PostProcessGeneratedCode(generator.GeneratedCode, generator.GeneratedNamespace, generator.GeneratedClass, generator.GeneratedExecuteMethod);

            // Extract design-time mappings
            IDictionary <int, GeneratedCodeMapping> designTimeLineMappings = null;

            if (Host.DesignTimeMode)
            {
                designTimeLineMappings = generator.CodeMappings;
            }

            // Collect results and return
            return(new GeneratorResults(treeBuilder.Results, generator.GeneratedCode, designTimeLineMappings));
        }
 protected override bool TryVisitSpecialSpan(Span span)
 {
     return(RazorCodeGenerator.TryVisit <ModelSpan>(span, new Action <ModelSpan>(this.VisitModelSpan)));
 }
예제 #26
0
 public static RazorCodeGenerator GetCodeGenerator(MinifierRazorHost codeGeneratorHost, RazorCodeGenerator incomingCodeGenerator, IMinifier minifier)
 {
     if (incomingCodeGenerator is CSharpRazorCodeGenerator)
     {
         return(new MinifierCSharpRazorCodeGenerator(codeGeneratorHost, incomingCodeGenerator, minifier));
     }
     return(codeGeneratorHost.DecorateCodeGenerator(incomingCodeGenerator));
 }
예제 #27
0
		internal static IRazorCodeGenerator Create(Microsoft.VisualStudio.Text.ITextBuffer buffer, Version razorVersion, string physicalPath, string virtualPath)
		{
			RazorCodeGenerator razorCodeGenerator = ServiceManager.GetService<RazorCodeGenerator>(buffer);
			if (razorCodeGenerator == null)
			{
				razorCodeGenerator = new RazorCodeGenerator(buffer, razorVersion, physicalPath, virtualPath);
			}
			return razorCodeGenerator;
		}