Inheritance: System.Web.Razor.RazorEngineHost, IRazorHost, ICodeGenerationEventProvider
コード例 #1
0
        public override void Initialize(RazorHost razorHost, IDictionary <string, string> directives)
        {
            base.Initialize(razorHost, directives);
            _languageUtil = razorHost.CodeLanguageUtil;

            _isSpecialPage = IsSpecialPage(razorHost.FullPath);
            FixupDefaultClassNameIfTemplate(razorHost);


            // The CSharpRazorCodeGenerator decides to generate line pragmas based on if the file path is available. Set it to an empty string if we
            // do not want to generate them.
            string path = razorHost.EnableLinePragmas ? razorHost.FullPath : String.Empty;

            switch (razorHost.CodeLanguage.LanguageName)
            {
            case "csharp":
                razorHost.CodeGenerator = new CSharpRazorCodeGenerator(razorHost.DefaultClassName, razorHost.DefaultNamespace, path, razorHost);
                razorHost.CodeGenerator.GenerateLinePragmas = razorHost.EnableLinePragmas;
                razorHost.Parser = new MvcCSharpRazorCodeParser();
                break;

            case "vb":
                razorHost.CodeGenerator = new VBRazorCodeGenerator(razorHost.DefaultClassName, razorHost.DefaultNamespace, path, razorHost);
                razorHost.CodeGenerator.GenerateLinePragmas = razorHost.EnableLinePragmas;
                razorHost.Parser = new MvcVBRazorCodeParser();
                break;

            default:
                throw new ArgumentOutOfRangeException("Unknown language - " + razorHost.CodeLanguage.LanguageName);
            }
        }
コード例 #2
0
 public override void Initialize(RazorHost razorHost, IDictionary <string, string> directives)
 {
     if (_override || IsDefaultBaseClass(razorHost.DefaultBaseClass))
     {
         razorHost.DefaultBaseClass = _typeName;
     }
 }
コード例 #3
0
 public override void Initialize(RazorHost razorHost, IDictionary <string, string> directives)
 {
     foreach (var transformer in CodeTransformers)
     {
         transformer.Initialize(razorHost, directives);
     }
 }
コード例 #4
0
 public override void Initialize(RazorHost razorHost, IDictionary<string, string> directives)
 {
     foreach (var transformer in CodeTransformers)
     {
         transformer.Initialize(razorHost, directives);
     }
 }
コード例 #5
0
        public override void Initialize(RazorHost razorHost, IDictionary<string, string> directives)
        {
            base.Initialize(razorHost, directives);

            razorHost.CodeGenerator = new MvcCodeGenerator(razorHost.DefaultClassName, razorHost.DefaultBaseClass, razorHost.DefaultNamespace, razorHost.FullPath, razorHost);
            razorHost.CodeGenerator.GenerateLinePragmas = razorHost.EnableLinePragmas;
            razorHost.Parser = new MvcCSharpRazorCodeParser();
        }
コード例 #6
0
        public override void Initialize(RazorHost razorHost, IDictionary <string, string> directives)
        {
            base.Initialize(razorHost, directives);

            razorHost.CodeGenerator = new MvcCodeGenerator(razorHost.DefaultClassName, razorHost.DefaultBaseClass, razorHost.DefaultNamespace, razorHost.FullPath, razorHost);
            razorHost.CodeGenerator.GenerateLinePragmas = razorHost.EnableLinePragmas;
            razorHost.Parser = new MvcCSharpRazorCodeParser();
        }
コード例 #7
0
        public override void Initialize(RazorHost razorHost, IDictionary<string, string> directives)
        {
            if (ReadSwitchValue(directives, GeneratePrettyNamesTransformer.DirectiveName) == true)
            {
                var trimLeadingUnderscores = ReadSwitchValue(directives, TrimLeadingUnderscoresKey) ?? false;
                _transformers.Add(new GeneratePrettyNamesTransformer(trimLeadingUnderscores));
            }

            string typeVisibility;
            if (directives.TryGetValue(TypeVisibilityKey, out typeVisibility))
            {
                _transformers.Add(new SetTypeVisibility(typeVisibility));
            }

            string typeNamespace;
            if (directives.TryGetValue(NamespaceKey, out typeNamespace))
            {
                _transformers.Add(new SetTypeNamespace(typeNamespace));
            }

            if (ReadSwitchValue(directives, DisableLinePragmasKey) == true)
            {
                razorHost.EnableLinePragmas = false;
            }
            else if (ReadSwitchValue(directives, GenerateAbsolutePathLinePragmas) != true)
            {
                // Rewrite line pragamas to generate bin relative paths instead of absolute paths.
                _transformers.Add(new RewriteLinePragmas());
            }

            if (ReadSwitchValue(directives, ExcludeFromCodeCoverage) == true)
            {
                _transformers.Add(new ExcludeFromCodeCoverageTransformer());
            }

            string suffix;
            if (directives.TryGetValue(SuffixFileName, out suffix))
            {
                _transformers.Add(new SuffixFileNameTransformer(suffix));
            }

            string genericParameters;
            if (directives.TryGetValue(GenericParametersKey, out genericParameters))
            {
                var parameters = from p in genericParameters.Split(',') select p.Trim();
                _transformers.Add(new GenericParametersTransformer(parameters));
            }

            string imports;
            if (directives.TryGetValue(ImportsKey, out imports))
            {
                var values = from p in imports.Split(',') select p.Trim();
                _transformers.Add(new SetImports(values, false));
            }

            base.Initialize(razorHost, directives);
        }
コード例 #8
0
 private void FixupDefaultClassNameIfTemplate(RazorHost razorHost)
 {
     string filePath = Path.GetDirectoryName(razorHost.FullPath).TrimEnd(Path.DirectorySeparatorChar);
     if (filePath.EndsWith("EditorTemplates", StringComparison.OrdinalIgnoreCase) || 
         filePath.EndsWith("DisplayTemplates", StringComparison.OrdinalIgnoreCase))
     {
         // Fixes #133: For EditorTemplates \ DisplayTemplates, we'll suffix the file with an underscore to prevent name collisions
         razorHost.DefaultClassName = razorHost.DefaultClassName + '_';
     }
 }
コード例 #9
0
        public override void Initialize(RazorHost razorHost, IDictionary <string, string> directives)
        {
            if (ReadSwitchValue(directives, GeneratePrettyNamesTransformer.DirectiveName) == true)
            {
                var trimLeadingUnderscores = ReadSwitchValue(directives, TrimLeadingUnderscoresKey) ?? false;
                _transformers.Add(new GeneratePrettyNamesTransformer(trimLeadingUnderscores));
            }

            string typeVisibility;

            if (directives.TryGetValue(TypeVisibilityKey, out typeVisibility))
            {
                _transformers.Add(new SetTypeVisibility(typeVisibility));
            }

            string typeNamespace;

            if (directives.TryGetValue(NamespaceKey, out typeNamespace))
            {
                _transformers.Add(new SetTypeNamespace(typeNamespace));
            }

            if (ReadSwitchValue(directives, DisableLinePragmasKey) == true)
            {
                razorHost.EnableLinePragmas = false;
            }
            else if (ReadSwitchValue(directives, GenerateAbsolutePathLinePragmas) != true)
            {
                // Rewrite line pragamas to generate bin relative paths instead of absolute paths.
                _transformers.Add(new RewriteLinePragmas());
            }

            if (ReadSwitchValue(directives, ExcludeFromCodeCoverage) == true)
            {
                _transformers.Add(new ExcludeFromCodeCoverageTransformer());
            }

            string suffix;

            if (directives.TryGetValue(SuffixFileName, out suffix))
            {
                _transformers.Add(new SuffixFileNameTransformer(suffix));
            }

            string genericParameters;

            if (directives.TryGetValue(GenericParametersKey, out genericParameters))
            {
                var parameters = from p in genericParameters.Split(',') select p.Trim();

                _transformers.Add(new GenericParametersTransformer(parameters));
            }

            base.Initialize(razorHost, directives);
        }
コード例 #10
0
        public override void Initialize(RazorHost razorHost, IDictionary <string, string> directives)
        {
            string projectPath          = GetProjectRoot(razorHost.ProjectRelativePath, razorHost.FullPath).TrimEnd(Path.DirectorySeparatorChar);
            string currentPath          = razorHost.FullPath;
            string directoryVirtualPath = null;

            var configFileMap = new WebConfigurationFileMap();

            var virtualDirectories = configFileMap.VirtualDirectories;

            while (!currentPath.Equals(projectPath, StringComparison.OrdinalIgnoreCase))
            {
                currentPath = Path.GetDirectoryName(currentPath);
                string relativePath = currentPath.Substring(projectPath.Length);
                bool   isAppRoot    = currentPath.Equals(projectPath, StringComparison.OrdinalIgnoreCase);
                string virtualPath  = relativePath.Replace('\\', '/');
                if (virtualPath.Length == 0)
                {
                    virtualPath = "/";
                }

                directoryVirtualPath = directoryVirtualPath ?? virtualPath;

                virtualDirectories.Add(virtualPath, new VirtualDirectoryMapping(currentPath, isAppRoot: isAppRoot));
            }

            try
            {
                var config = WebConfigurationManager.OpenMappedWebConfiguration(configFileMap, directoryVirtualPath);
                RazorPagesSection section = config.GetSection(RazorPagesSection.SectionName) as RazorPagesSection;
                if (section != null)
                {
                    string baseType = section.PageBaseType;
                    if (!DefaultBaseType.Equals(baseType, StringComparison.OrdinalIgnoreCase))
                    {
                        _transformers.Add(new SetBaseType(baseType));
                    }

                    if (section != null)
                    {
                        foreach (NamespaceInfo n in section.Namespaces)
                        {
                            razorHost.NamespaceImports.Add(n.Namespace);
                        }
                    }
                }
            }
            catch (IndexOutOfRangeException)
            {
                // Bug in Mono framework.
                // Configure namespaces using the RazorGenerator directives file instead.
            }
            base.Initialize(razorHost, directives);
        }
コード例 #11
0
 public override void Initialize(RazorHost razorHost, IDictionary <string, string> directives)
 {
     if (_replaceExisting)
     {
         razorHost.NamespaceImports.Clear();
     }
     foreach (var import in _imports)
     {
         razorHost.NamespaceImports.Add(import);
     }
 }
コード例 #12
0
        private void FixupDefaultClassNameIfTemplate(RazorHost razorHost)
        {
            string filePath = Path.GetDirectoryName(razorHost.FullPath).TrimEnd(Path.DirectorySeparatorChar);

            if (filePath.EndsWith("EditorTemplates", StringComparison.OrdinalIgnoreCase) ||
                filePath.EndsWith("DisplayTemplates", StringComparison.OrdinalIgnoreCase))
            {
                // Fixes #133: For EditorTemplates \ DisplayTemplates, we'll suffix the file with an underscore to prevent name collisions
                razorHost.DefaultClassName = razorHost.DefaultClassName + '_';
            }
        }
コード例 #13
0
        public override void Initialize(RazorHost razorHost, IDictionary<string, string> directives)
        {
            string projectPath = GetProjectRoot(razorHost.ProjectRelativePath, razorHost.FullPath).TrimEnd(Path.DirectorySeparatorChar);
            string currentPath = razorHost.FullPath;
            string directoryVirtualPath = null;

            var configFileMap = new WebConfigurationFileMap();

            var virtualDirectories = configFileMap.VirtualDirectories;
            while (!currentPath.Equals(projectPath, StringComparison.OrdinalIgnoreCase))
            {
                currentPath = Path.GetDirectoryName(currentPath);
                string relativePath = currentPath.Substring(projectPath.Length);
                bool isAppRoot = currentPath.Equals(projectPath, StringComparison.OrdinalIgnoreCase);
                string virtualPath = relativePath.Replace('\\', '/');
                if (virtualPath.Length == 0)
                {
                    virtualPath = "/";
                }

                directoryVirtualPath = directoryVirtualPath ?? virtualPath;

                virtualDirectories.Add(virtualPath, new VirtualDirectoryMapping(currentPath, isAppRoot: isAppRoot));
            }

            try
            {
                var config = WebConfigurationManager.OpenMappedWebConfiguration(configFileMap, directoryVirtualPath);
                RazorPagesSection section = config.GetSection(RazorPagesSection.SectionName) as RazorPagesSection;
                if (section != null)
                {
                    string baseType = section.PageBaseType;
                    if (!DefaultBaseType.Equals(baseType, StringComparison.OrdinalIgnoreCase))
                    {
                        _transformers.Add(new SetBaseType(baseType));
                    }

                    if (section != null)
                    {
                        foreach (NamespaceInfo n in section.Namespaces)
                        {
                            razorHost.NamespaceImports.Add(n.Namespace);
                        }
                    }
                }
            }
            catch (IndexOutOfRangeException)
            {
                // Bug in Mono framework.
                // Configure namespaces using the RazorGenerator directives file instead.
            }
            base.Initialize(razorHost, directives);
        }
コード例 #14
0
        public override void Initialize(RazorHost razorHost, IDictionary<string, string> directives)
        {
            base.Initialize(razorHost, directives);

            // Remove the extension and replace path separator slashes with underscores
            string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(razorHost.ProjectRelativePath);

            // If its a PageStart page, set the base type to StartPage.
            if (fileNameWithoutExtension.Equals("_pagestart", StringComparison.OrdinalIgnoreCase))
            {
                razorHost.DefaultBaseClass = typeof(System.Web.WebPages.StartPage).FullName;
            }
        }
コード例 #15
0
        public override void Initialize(RazorHost razorHost, IDictionary <string, string> directives)
        {
            base.Initialize(razorHost, directives);

            // Remove the extension and replace path separator slashes with underscores
            string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(razorHost.ProjectRelativePath);

            // If its a PageStart page, set the base type to StartPage.
            if (fileNameWithoutExtension.Equals("_pagestart", StringComparison.OrdinalIgnoreCase))
            {
                razorHost.DefaultBaseClass = typeof(System.Web.WebPages.StartPage).FullName;
            }
        }
コード例 #16
0
        public override void Initialize(RazorHost razorHost, IDictionary <string, string> directives)
        {
            base.Initialize(razorHost, directives);
            razorHost.DefaultBaseClass = typeof(System.Web.WebPages.HelperPage).FullName;

            razorHost.GeneratedClassContext = new GeneratedClassContext(
                executeMethodName: GeneratedClassContext.DefaultExecuteMethodName,
                writeMethodName: GeneratedClassContext.DefaultWriteMethodName,
                writeLiteralMethodName: GeneratedClassContext.DefaultWriteLiteralMethodName,
                writeToMethodName: WriteToMethodName,
                writeLiteralToMethodName: WriteLiteralToMethodName,
                templateTypeName: typeof(System.Web.WebPages.HelperResult).FullName,
                defineSectionMethodName: "DefineSection"
                );
        }
コード例 #17
0
        public override void Initialize(RazorHost razorHost, IDictionary<string, string> directives)
        {
            base.Initialize(razorHost, directives);
            razorHost.DefaultBaseClass = String.Empty;

            razorHost.GeneratedClassContext = new GeneratedClassContext(
                    executeMethodName: GeneratedClassContext.DefaultExecuteMethodName,
                    writeMethodName: GeneratedClassContext.DefaultWriteMethodName,
                    writeLiteralMethodName: GeneratedClassContext.DefaultWriteLiteralMethodName,
                    writeToMethodName: WriteToMethodName,
                    writeLiteralToMethodName: WriteLiteralToMethodName,
                    templateTypeName: typeof(System.Web.WebPages.HelperResult).FullName,
                    defineSectionMethodName: "DefineSection"
            );
        }
コード例 #18
0
        public override void Initialize(RazorHost razorHost, IDictionary<string, string> directives)
        {
            base.Initialize(razorHost, directives);

            _isSpecialPage = IsSpecialPage(razorHost.FullPath);
            FixupDefaultClassNameIfTemplate(razorHost);


            // The CSharpRazorCodeGenerator decides to generate line pragmas based on if the file path is available. Set it to an empty string if we 
            // do not want to generate them.
            string path = razorHost.EnableLinePragmas ? razorHost.FullPath : String.Empty;
            razorHost.CodeGenerator = new CSharpRazorCodeGenerator(razorHost.DefaultClassName, razorHost.DefaultNamespace, path, razorHost);
            razorHost.CodeGenerator.GenerateLinePragmas = razorHost.EnableLinePragmas;
            razorHost.Parser = new MvcCSharpRazorCodeParser();
        }
コード例 #19
0
        public override void Initialize(RazorHost razorHost, IDictionary <string, string> directives)
        {
            base.Initialize(razorHost, directives);

            _isSpecialPage = IsSpecialPage(razorHost.FullPath);
            FixupDefaultClassNameIfTemplate(razorHost);


            // The CSharpRazorCodeGenerator decides to generate line pragmas based on if the file path is available. Set it to an empty string if we
            // do not want to generate them.
            string path = razorHost.EnableLinePragmas ? razorHost.FullPath : String.Empty;

            razorHost.CodeGenerator = new CSharpRazorCodeGenerator(razorHost.DefaultClassName, razorHost.DefaultNamespace, path, razorHost);
            razorHost.CodeGenerator.GenerateLinePragmas = razorHost.EnableLinePragmas;
            razorHost.Parser = new MvcCSharpRazorCodeParser();
        }
コード例 #20
0
        public override void Initialize(RazorHost razorHost, IDictionary <string, string> directives)
        {
            string typeVisibility;

            if (directives.TryGetValue(TypeVisibilityKey, out typeVisibility))
            {
                _transformers.Add(new SetTypeVisibility(typeVisibility));
            }

            string typeNamespace;

            if (directives.TryGetValue(NamespaceKey, out typeNamespace))
            {
                _transformers.Add(new SetTypeNamespace(typeNamespace));
            }

            if (ReadSwitchValue(directives, DisableLinePragmasKey) == true)
            {
                razorHost.EnableLinePragmas = false;
            }
            else if (ReadSwitchValue(directives, GenerateAbsolutePathLinePragmas) != true)
            {
                // Rewrite line pragamas to generate bin relative paths instead of absolute paths.
                _transformers.Add(new RewriteLinePragmas());
            }

            if (ReadSwitchValue(directives, TrimLeadingUnderscoresKey) != false)
            {
                // This should in theory be a different transformer.
                razorHost.DefaultClassName = razorHost.DefaultClassName.TrimStart('_');
            }

            if (ReadSwitchValue(directives, ExcludeFromCodeCoverage) == true)
            {
                _transformers.Add(new ExcludeFromCodeCoverageTransformer());
            }

            string suffix;

            if (directives.TryGetValue(SuffixFileName, out suffix))
            {
                _transformers.Add(new SuffixFileNameTransformer(suffix));
            }

            base.Initialize(razorHost, directives);
        }
コード例 #21
0
        public override void Initialize(RazorHost razorHost, IDictionary<string, string> directives)
        {
            var fileName = Path.GetFileNameWithoutExtension(razorHost.ProjectRelativePath);
            var className = ParserHelpers.SanitizeClassName(fileName);
            if (_trimLeadingUnderscores)
            {
                className = className.TrimStart('_');
            }
            razorHost.DefaultClassName = className;

            // When generating pretty type names, if we also have ItemNamespace from VS, use it.
            string vsNamespace;
            if (directives.TryGetValue(VsNamespaceKey, out vsNamespace) && 
               !string.IsNullOrEmpty(vsNamespace))
            {
                razorHost.DefaultNamespace = vsNamespace;
            }
        }
コード例 #22
0
        public override void Initialize(RazorHost razorHost, IDictionary<string, string> directives)
        {
            string typeVisibility;
            if (directives.TryGetValue(TypeVisibilityKey, out typeVisibility))
            {
                _transformers.Add(new SetTypeVisibility(typeVisibility));
            }

            string typeNamespace;
            if (directives.TryGetValue(NamespaceKey, out typeNamespace))
            {
                _transformers.Add(new SetTypeNamespace(typeNamespace));
            }

            if (ReadSwitchValue(directives, DisableLinePragmasKey) == true)
            {
                razorHost.EnableLinePragmas = false;
            }
            else if (ReadSwitchValue(directives, GenerateAbsolutePathLinePragmas) != true)
            {
                // Rewrite line pragamas to generate bin relative paths instead of absolute paths.
                _transformers.Add(new RewriteLinePragmas());
            }

            if (ReadSwitchValue(directives, TrimLeadingUnderscoresKey) != false)
            {
                // This should in theory be a different transformer.
                razorHost.DefaultClassName = razorHost.DefaultClassName.TrimStart('_');
            }

            if (ReadSwitchValue(directives, ExcludeFromCodeCoverage) == true)
            {
                _transformers.Add(new ExcludeFromCodeCoverageTransformer());
            }

            string suffix;
            if (directives.TryGetValue(SuffixFileName, out suffix))
            {
                _transformers.Add(new SuffixFileNameTransformer(suffix));
            }

            base.Initialize(razorHost, directives);
        }
コード例 #23
0
        public override void Initialize(RazorHost razorHost, IDictionary <string, string> directives)
        {
            var fileName  = Path.GetFileNameWithoutExtension(razorHost.ProjectRelativePath);
            var className = ParserHelpers.SanitizeClassName(fileName);

            if (_trimLeadingUnderscores)
            {
                className = className.TrimStart('_');
            }
            razorHost.DefaultClassName = className;

            // When generating pretty type names, if we also have ItemNamespace from VS, use it.
            string vsNamespace;

            if (directives.TryGetValue(VsNamespaceKey, out vsNamespace) &&
                !string.IsNullOrEmpty(vsNamespace))
            {
                razorHost.DefaultNamespace = vsNamespace;
            }
        }
コード例 #24
0
        public override void Initialize(RazorHost razorHost, IDictionary <string, string> directives)
        {
            base.Initialize(razorHost, directives);

            switch (razorHost.CodeLanguage.LanguageName)
            {
            case "csharp":
                razorHost.CodeGenerator = new MvcCSharpCodeGenerator(razorHost.DefaultClassName, razorHost.DefaultBaseClass, razorHost.DefaultNamespace, razorHost.FullPath, razorHost);
                razorHost.CodeGenerator.GenerateLinePragmas = razorHost.EnableLinePragmas;
                razorHost.Parser = new MvcCSharpRazorCodeParser();
                break;

            case "vb":
                razorHost.CodeGenerator = new MvcVBDotNetCodeGenerator(razorHost.DefaultClassName, razorHost.DefaultBaseClass, razorHost.DefaultNamespace, razorHost.FullPath, razorHost);
                razorHost.CodeGenerator.GenerateLinePragmas = razorHost.EnableLinePragmas;
                razorHost.Parser = new MvcVBRazorCodeParser();
                break;

            default:
                throw new ArgumentOutOfRangeException("Unknown language - " + razorHost.CodeLanguage.LanguageName);
            }
        }
コード例 #25
0
 public override void Initialize(RazorHost razorHost, IDictionary<string, string> directives)
 {
     _projectRelativePath = razorHost.ProjectRelativePath;
     directives.TryGetValue(VirtualPathDirectiveKey, out _overriddenVirtualPath);
 }
コード例 #26
0
 public override void Initialize(RazorHost razorHost, IDictionary <string, string> directives)
 {
     _projectRelativePath = razorHost.ProjectRelativePath;
     directives.TryGetValue(VirtualPathDirectiveKey, out _overriddenVirtualPath);
 }
コード例 #27
0
 public override void Initialize(RazorHost razorHost, IDictionary <string, string> directives)
 {
     razorHost.StaticHelpers = true;
 }
コード例 #28
0
            public MvcCSharpCodeGenerator(string className, string baseClass, string rootNamespaceName, string sourceFileName, RazorHost host)
                : base(className, rootNamespaceName, sourceFileName, host)
            {
                string baseType;


                if (IsSpecialPage(sourceFileName))
                {
                    baseType = typeof(ViewStartPage).FullName;
                }
                else
                {
                    baseType = host.CodeLanguageUtil.BuildGenericTypeReference(baseClass, new string[] { host.CodeLanguageUtil.DefaultModelTypeName });
                }
                SetBaseType(baseType);
            }
コード例 #29
0
 public override void Initialize(RazorHost razorHost, IDictionary<string, string> directives)
 {
     razorHost.DefaultNamespace = _namespace;
 }
コード例 #30
0
 public override void Initialize(RazorHost razorHost, IDictionary <string, string> directives)
 {
     razorHost.DefaultNamespace = _namespace;
 }
コード例 #31
0
 public virtual void Initialize(RazorHost razorHost, IDictionary<string, string> directives)
 {
     // do nothing
 }
コード例 #32
0
 public virtual void Initialize(RazorHost razorHost, IDictionary <string, string> directives)
 {
     _razorHost = razorHost;
     // do nothing
 }